Non ho letto tutto il post (solo il quesito iniziale)...quindi abbiate pieta' se dico una cosa gia' detta.
Probabilmente .NET codifica i SINGLE in modo diverso (usando 2 bytes anziche' uno per esempio) e questo ti modifica la lunghezza del record.
Se e' cosi', puoi aggirare l'ostacolo convertendo i single da VB5 in valori stringa a lunghezza fissa in modo da avere un record composto solo da valori stringa, al momento di utilizzare il valore numerico letto dal file, ti basta fare un Val()