Have hard time understanding your namings and relations and some of the code doesnt make sense to me imediately.
I dont know google maps marker module as i never used it yet but looking at the description of the markup module i think you have to specify the fields name in the option array and not a value like you do with $feature->url ... It would have to be the name of the field like 'url'. See https://github.com/ryancramerdesign/FieldtypeMapMarker/blob/master/MarkupGoogleMap.module#L73 you seem to misunderstand this, same as with the rss feed markup module.
As you dont give a field name the but a the url of the last item in your foreach loop i can imagine the markup module doesnt find it and gives url of the page.
Since i think you dont want the url of the page that you give to the markers via your page array but from one of your relation to another page, you would need a simple property hook to set that url to a new property (=field) for each page, that you can then give the name to the options array. Or since you already loop and add your pages to the markers page array you could set it right there.
So bfd_events_places_id_list is now what exactly? A page field? If its a single page field... The id in the name is confusing to me as it would be a Page object actually and not an id. Anyway. If it is a page field you could try using it to add a url to it on the fly.
$myentry = $feature->bfd_events_places_id_list;
$myentry->markerUrl = $feature->url; // or whatever url
$markers->add($myentry);
Then use that 'markerUrl' we added to the marker page in the options array...
'markerLinkField' = 'markerUrl'