problem is that you’re mixing coordinate systems. L.svgOverlay expects you to manage bounds in geographic space, but you’re also positioning elements with latLngToLayerPoint, which is relative to the map pane. That double transform is why markers break when you pan+zoom. The simpler fix is to skip L.svgOverlay and instead use Leaflet’s built-in L.svg() renderer — then you can append <g>/<circle> directly into its <svg> and just update positions on map events. This way the <circle>s always stay pinned to their lat/lng, no matter how you pan or zoom.