Penso che l' errore sia proprio questa istruzione:

parole[i][j] = '\0';

In quanto se non sbaglio, essendo questo vettore una porzione contigua di celle (20000 nel tuo caso), se tu metti questa istruzione se tu salvi la prima parola, che per esempio è lunga 5, tu dici che questa stringa di 20000 caratteri terminerà alla 5 lettera. Quindi libereresti tutti i caratteri rimanenti e non li ritroveresti all' iterazione successiva, perchè il vettore è stato ridotto.

Quindi la cosa più semplice è allocare un vettore lungo quanto lo spazio del file (se il file è di 2000 byte, tu dichiari un char vector[2000]), salvi il file in una stringa e poi ti scansioni tutta questa stringa. Credo che poi fatto questo basti fare un ciclo con uno 'sscanf' per prelevare la stringa e poi 'sprintf' per salvarla dentro ogni stringa del vettore parole[1000][20].

Così credo che funzioni.

Ciao!