Ok. So from the two answers from @MeMTn and @chris-camaratta, here is a few thoughts:
1)
On a whim I placed the call to the GeoLocation API inside a setTimeout (to allow the call stack to empty) and the problem went away. No idea why that would fix the issue. . .
I did the same in my angularjs app, and it works. Perfect!
2)
i don't think it is a bug in safari, you can try the following example, it worked fine for me: http://www.w3schools.com/html/html5_geolocation.asp
How come this works (in Safari!) without setTimeout?
In my angularjs application, the call to GeoLocation is one of the first things to happen when the page loads. I believe this is the case for almost all other applications/web pages. In the W3 example there is a clickable button that fires the call to GeoLocation when the user clicks it (which happens when the page has loaded).
By setting a timeout, we allow Safari to deal with some other stuff (that might have something to do with calling the GeoLocation API for all I know) for a few (milli)seconds.
If I set the timeout to < 10 the error is back, even on localhost. I think I will stick with 100 ms for now. But that is highly unfair for other, working browsers.
Bug or not it's clearly something with Safari.