
I think part of the problem here is that we're not managing shadows separately, as leaflet does with its built in markers. I'm not 100% what the right way to do this is but its likely we need to extend L.Icon and render an additional HTML element for the shadow. This is then added to the leaflet ShadowPane, which site below the marker pane.. ensuring shadows don't overlap other markers.
We might be able to use https://github.com/hiasinho/Leaflet.vector-markers to handle much of this.