forse perchè hai un processore dual core o hyperthreading e/o hai il framework 1.x.
la causa piu probabile è la prima che ho scritto...
scommetto che il mio programma non ti da tutti i processi in esecuzione.
confermi ?
credo che,
il mio programma funziona perchè è stato compilato in un processore single core. quando viene eseguito, usa solo una core del tuo processore e non se ne accorge dell'altra.

prova cosi':

Process[] pc = Process.GetProcesses("127.0.0.1");

e se non funziona, cosi':

Process[] pc = Process.GetProcesses("localhost");