I'm sorry, but with some tests, it seems as though simply calling repaint after calling validate accomplishes your goal. (At least it did for me, although without it I also saw what you were experiencing.)
I would normally assume that a call to repaint() after a call to validate() would essentially be redundant, but seemingly not.