Первая проблема, которую я вижу, состоит в том, что вы всегда пишете все содержимое 'buff', а не только количество прочитанных байтов. Если ваш размер файла не делится равномерно на 1024, это проблема. Это также проблема в том, что даже чтение не возвращает полных 1024 байта.
Обновление 1
Второе, что я здесь задаю, это то, почему вы используете char [] для хранения двоичных данных? Это просто плохая практика вокруг. char для строковых данных (а char в CE равен 2 байта). Используйте байт [] для двоичных данных - вот для чего он. Вполне возможно, что текущая кодировка делает что-то вроде удаления MSB из байтов данных, потому что вы помещаете его в символ. Это также может быть связано с проблемой размера.