PushPins are aligned so their bottom-left point is at the GeoCoordinate. That's done by the default of of their MapOverlay PositionOrigin being set to 0,1. If you set the MapOverlay PositionOrigin to 0.5,0.5 MapOverlay will align it's center towards the GeoCoordinate. For example, UserLocationMarker uses PositionOrigin of 0.5,0.5 to align it's visual center to the coordinate.
Try playing around with the PushPin.PositionOrigin and see if that solves your problem. PushPin.PositionOrigin of 0.5,0.5 would be a good starting value depending on the effect you're trying to achieve. Remember, PushPin and UserLocationMarker are just fancy MapOverlay so when in doubt revert to plain MapOverlays to test stuff out.
<!-- Default Style used for Pushpin -->
<Style TargetType="maptk:Pushpin">
<Setter Property="PositionOrigin" Value="0,1" />
</Style>
<!-- Default Style used for MePOI -->
<Style TargetType="maptk:UserLocationMarker">
<Setter Property="PositionOrigin" Value="0.5,0.5" />
</Style>
One reason why you might have gotten exceptions when upgrading from WP7.5 to WP8 is because PositionOrigin has changed from Bing Maps custom data type to a simplified Point X,Y structure.