Кто-то/что-то подсирает в твой буфер и портит правильные данные. У меня было аналогичная ситуация, когда я использовал один и тот-же буфер для приема и передачи в полудуплексном режиме. Что логично.
Подсирание происходило после того, как я сформировал пакет на отправку (вместе с CRC). И в этот момент приемник ловил паразитный байт (это был IrDA), который портил готовый к отправке пакет.
Пакет отправлялся, принимающая сторона фиксировала ошибку CRC. Долго я отлаживался на принимающей стороне, пока не понял что проблема на передающей стороне.