Jest, how are you doing surface.rotate? My surfaces look strange when not rotated at perfect PI increments.
Ok, I figured it out. It was a directional thing. I had to find the colors from the source to the destination. In this way I assure every color is mapped - even if some are mapped twice, which is how Sphere does it. 
Here's the code to rotate the x and y points:
private static int RotateX(int x, int y, double rad, int m_x, int m_y)
{
return (int)(Math.Round((x - m_x) * Math.Cos(rad) -
(y - m_y) * Math.Sin(rad)) + m_x);
}
private static int RotateY(int x, int y, double rad, int m_x, int m_y)
{
return (int)(Math.Round((x - m_x) * Math.Sin(rad) +
(y - m_y) * Math.Cos(rad)) + m_y);
}