I put the formulas that Alvaro gave me into a static method. Here's the method:
[source lang="csharp"] private static Vector2 RotateVector2ByAngle(Vector2 originalVector, float rotationAngleInRadians){ float rotatedX = (originalVector.X * (float)Math.Cos(rotationAngleInRadians)) - (originalVector.Y * (float)Math.Sin(rotationAngleInRadians)); float rotatedY = (originalVector.X * (float)Math.Sin(rotationAngleInRadians)) + (originalVector.Y * (float)Math.Cos(rotationAngleInRadians)); return new Vector2(rotatedX, rotatedY);}[/source]
Position of Sprites When Not Rotated
I set the top left corner of the mother ship at (640, 360) with a rotation of 0.
The top left corner of satellite ship 1 is offset from the mother ship by (-32, -40) with a rotation of 0.
The top left corner of satellite ship 2 is offset from the mother ship by (64, -40) with a rotation of 0.
I am rotating the each ship around it's center point.
The mother ship sprite is 64x64 pixels.
The satellite ships are 32x32 pixels.
Here's what happens when I pass the offsets into the static method and set the sprites' draw positions to the new Vector2:


It looks to me like the ships slide to the right and up a bit more than they should. The only thing I can think that might be causing this is drawing the ship based on it's top left corner but rotating it around it's center point. Any ideas on what I've done wrong?
NoAdmiral:
If you think about it, your sprites have a point in each corner, which you are rotating around another point. The math to get those corner points to rotate around the center-point (or the rotation point) is the same that you can use to rotate any number of arbitrary points about an axis. I've never used XNA, but if you can view the code for rotating the sprite that should be a pretty good clue of what to do.
That's the problem. I don't know the math. I'm sure I can learn it, but it's probably been 15 years since I did that level of math and I just can't remember how to do it.