There is indeed something strange going on here.
Setting the BackColor seems to be causing a problem, but it should not be as the OnBackColorChanged() method, which raises the Paint Event, is only called if the Color differs from the current set Color. For some reason though, the Control is recieving WM_PAINT messages in a continuous loop.
A simple fix would be to set the BackColor only if it differs from the desired Color:
if (!this.BackColor.Equals(Color.Blue))
this.BackColor = Color.Blue;
This problem does not occur in VS2003, so I would suspect that this is an issue caused by the CustomRenderers used to paint the button when FlatStyle is not set to System.
If the Custom Control Inherits from Control rather than a ButtonBase derivitivethen this is not an issue.
As a side note:
I don't have any sort of programming qualifications, but I would think it bad practice to change GUI properties during a Paint event, even if there were no such problems.