aspettando qualcuno che capisca qualcosa di C# ti dico io quello che so, valido per tutti i linguaggi oo.
Il costruttore di Random usa il tempo corrente come seme di generazione. Come lo hai scritto tu usa sempre lo stesso seme per più iterazioni. Istanzia quindi l'oggetto fuori dal ciclo