If a pushpin's latlong is behind the planet, the call to
GetPosition(VELatLong latLong, out VEPushPinAltitudeEvent altEvent, out bool isVisible)
will return with isVisible set to false. (Several other conditions cause isVisible to be false as well.)
This is primarily used in
public override Point? UpdatePosition(VEMap map)
If you are overriding this method you'll need to either call base.UpdatePosition(map) or provide similar logic. I'm guessing you already know all this though, but maybe it will help as you debug it.
FYI the call to this.Map.IsBehindPlanet(latLong) is relatively expensive, which is why it is throttled to every 10 frames. This allows better performance with more pushpins, assuming the whole thing is working at all.
;) How many pushpins are you databinding at one time?
Are the standard VEPushPins working properly? If so, it may just be a matter of working backwards from your customizations to isolate which change caused the behavior change.