If you're overriding paint you shouldn't be creating your own graphics object.
Are you trying to draw the panel or the picture box? You shouldn't confuse the refresh of one control with the other. Try this:
picturebox1.Paint += new PaintEventHandler(picturebox1_Paint);
The event arguments for the event delegate contains the graphics object for drawing the control:
void picturebox1_Paint(object sender, PaintEventArgs e)
{
Graphics c = e.Graphics;
}
If the picture box is nested in the panel, calling the refresh on the panel will still call your picture box paint method.