Well at first I was convinced there was something wrong elsewhere in your code, as from what you've posted I couldn't see an error, but then I gave it a quick test.
If you call GetRandomColor() from a button click and then click the button repeatedly, it always returns a different colour. However when called from a loop it returns the same colour for a set amount of time. If you had more items in your loop you would have discovered that after a certain amount the colour changes.
Assumably this is down to the way random generates a number. I remember back in the days of VB 6 you needed to pass a seed to avoid always getting the same value. To counter this many people passed a tickcount. Perhaps in .Net this is automatically done. Calling the method repeatedly over such a period of time however would mean the tickcount stays the same for several iterations of the call.
I'm sorry, this doesn't solve your problem, but hopefully shines some light on why its happenign.