Hi,
There is no issue in the absolute adding layers multiple times to the same map.
The map makes sure it does not process multiple times layers that are already there.
Please note that the function you pass to `pointToLayer` should
return a layer (marker), that will be included into the GeoJSON Layer Group being built.
If I copy-paste your code as-is, it breaks because of this.
Since those markers are added into the GeoJSON Layer Group (which you add to the map in the end), you no longer need to add them directly to the map.
As for your center markers, there is no issue computing them Client side rather than requesting them to OSM, since anyway you want the full polygon as well.
Regarding speed, it might not be as simple saying which technique is better, as it would depend on your connectivity and CPU power.
I do not think requesting an extra coordinate pair per polygon would hurt that much, though.
Instead of adding the computed center directly to the map, you could store it into a temporary Layer Group that you add to your GeoJSON Layer Group at the end.
That way, the "centers" are part of that Group as well.
E.g. you can switch it on/off through the Layers Control, and all related layers (markers, polygons, center markers) will be turned on/off accordingly.
Demo:
http://jsfiddle.net/ve2huzxw/79/var layersControl = L.control.layers(null, null, {
collapsed: false
}).addTo(map);