I don't quite follow your code exactly. Why create a graphics object on the main form only to use it in the Paint event, in which a graphics object is already passed as a parameter. Also I think you're making this a tad more complicated than it is. Code below to hopefully give you what you need (or at least illustrate the principle):
csharp Code:
  1. RectangleF myrect = new RectangleF(300.0f, 150.0f, 30.0f, 30.0f);
  2.         RectangleF myorbit = new RectangleF(200.0f, 100.0f, 115.0f, 65.0f);
  3.         float ellipse_angle = 0.0f;
  4.         float rotation_angle = 0.0f;
  5.  
  6.         private void Main_Paint(object sender, PaintEventArgs e)
  7.         {
  8.             e.Graphics.DrawEllipse(Pens.Red, myorbit.X, myorbit.Y, myorbit.Width, myorbit.Height);
  9.  
  10.             using (System.Drawing.Drawing2D.Matrix transformation = new System.Drawing.Drawing2D.Matrix() { })
  11.             {
  12.                 transformation.Translate(myrect.X, myrect.Y);
  13.                 transformation.Rotate(rotation_angle);
  14.                 transformation.Translate(-myrect.X, -myrect.Y);
  15.  
  16.                 e.Graphics.Transform = transformation;
  17.             }
  18.  
  19.             e.Graphics.DrawRectangle(Pens.AntiqueWhite, myrect.X, myrect.Y, myrect.Width, myrect.Height);
  20.         }
  21.  
  22.         private void timerxoay_Tick(object sender, EventArgs e)
  23.         {
  24.             ellipse_angle += (float)(Math.PI / 40.0);
  25.             rotation_angle += (float)(Math.PI / 10.0);
  26.             myrect.Location = new PointF(myorbit.X + (float)((Math.Cos(ellipse_angle) + 1.0) * myorbit.Width / 2.0),
  27.                                          myorbit.Y + (float)((Math.Sin(ellipse_angle) + 1.0) * myorbit.Height / 2.0));
  28.             this.Invalidate();
  29.         }
  30.  
  31.         private void cmdrotate_Click(object sender, EventArgs e)
  32.         {
  33.             timerxoay.Enabled = !timerxoay.Enabled;
  34.         }

Regards Tom