А почему вы уверены, что DataReceived всегда отработает ровно тогда, когда в буфере порта сложится 13 байт? Я могу сказать, что микроконтроллер даже три байта может вам отправить как 2+ 1 или 1+1+1 или 1+2. То есть DataReceived у вас отработает за время передачи 2 или 3 раза.
Самое оптимальное, как мне кажется - вычитывать все доступное из буфера порта и искать в результате чтения начало и конец ответа от микроконтроллера.
В моем случае от контроллера приходило 4 типа ответа: XX, F0 XX, Е0 XX и E0 F0 XX, то есть стандартные скан-коды клавиатуры (если не брать в расчёт клавиши break и print screen, там многобайтовых посылка).
Я просто читал содержимое буфера порта и если там было только XX, то данные уходили дальше, если только E0 или F0, то в мой буфер писалось E0 и ставился флаг продолжения чтения. Ну и так далее. Таким образом я гарантированно правильно читал данные от контроллера. Если есть необходимость - могу завтра с работы скопипастить сюда свой код.