This value you can store along with the child object, to know where to draw it in relation to the parent.

Solving 2) is more complicated.

You want to be able to rotate the child object's position around the parent.

To do this you need to:

Find the current rotation of and distance to the child object

change the rotation by the wanted amount

calculate the new position using cos and sin (you may want to read up on these)
basically cos(angle) gives you the X coordinate of where to position something, and sin(angle) gives you the Y coordinate.

Getting the rotation of a Vector2 is possible using the Atan2 function:

Radian is a type of measurement where there are 2 * PI degrees (approximately 6.283) around the full circumference of the circle as opposed to regular degrees where you have 360.

Getting the distance is a method on the Vector2 struct called Length().

using the distance and rotation you can use the following method to find the new location of the child object (the "sattelite" in the methodname below):

public Vector2 GetPositionOfSatellite(Vector2 center, float distance, float directionInRadians)

You would have to make an implementation of IPermanentMapStorage which gets maps from a webservice.

You can probably use the rest of the code as is

/Jake

P.S. in case you are interested in seeing the newest version, which uses Perlin noise for map generation (not a requirement for the framework), it is attached to this post.