C'è un problema di concorrenza: l'incremento è diviso in due fasi, incremento e assegnazione, se avviene una sospensione fra le due l'incremento avviene per più thread diversi sul valore precedente. Avrai notato che i valori sono sempre minori dell'atteso.
Per risolvere problemi semplici come questo puoi usare i metodi Interlocked.
Più in generale dovresti informarti su concurrency e multithreading.