Просто используйте метод DrawToBitmap () формы:
using (var bmp = new Bitmap(this.Width, this.Height)) {
this.DrawToBitmap(bmp, new Rectangle(Point.Empty, this.Size));
bmp.Save("c:/temp/test.png");
}
Graphics.CopyFromScreen () - это еще один способ, аналогичный тому, что вы делаете сейчас. Он на самом деле копирует изображение с экрана, а не просит форму нарисовать себя в растровое изображение. С тем же недостатком, форма должна быть видимой.