Secondo me, il file ha una dimensione pari alla metà del file che tenti di scaricare, e credo che il problema sia dovuto al fatto che richiami due volte ReadByte, e quindi leggi una volta il byte per verificare se procedere oppure no, e poi ne leggi un altro per salvarlo, con il risultato che ne perdi uno per strada.

Rivedi la parte del ciclo while.

Ciao!