I know this is a late response but I was working on a similar project and using a similar approach, so I thought I'd share. The approach that I used was:
Create two global double variables to hold X,Y coord's:
double mapLocX;
double mapLocY;
Set these global doubles to the location of the point of your pushpin in your DragStarted event:
Point point = myMap.LocationToViewportPoint(myPin.Location);
mapLocX = point.X;
mapLocY = point.Y;
In your dragDelta event, change these variables as your would your pushpin:
mapLocX += e.HorizontalChange;
mapLocY += e.VerticalChange;
Now on DragCompleted create a new point that takes in our rendered global variables, and map them to a geocoordinate, and here's the kicker; Remove our old pin from the ObservableCollection (Mine is Locations) and add in a new pushpin at our new coordinate:
Point point = new Point(mapLocX, mapLocY);
GeoCoordinate geoCoord = new GeoCoordinate();
geoCoord = myMap.ViewportPointToLocation(point);
Locations.Remove(myPin.Location);
Locations.Add(geoCoord);
Hope this helps