Your map is in the Mercator projection. But, the GeoPoint::toWorld() function doesn't know that :) So when you call GeoPoint::toWorld on a point with a geographic SRS, the resulting XYZ is in geocentric space. That would be fine for round earth, but not for Mercator.
So in this case you need to transform your GeoPoint into the map's SRS before calling toWorld:
One more piece of advice: Instead of getting your geoSRS from the registry, get it directly from the mapNode's SRS. Then you will get correct datum correlation: