В меге есть хардварный буфер. Если длина пакета будет равна(кратна) этому буферу, то IMHO вышеуказанной проблемы не будет.
Приём надо осуществлять в USART Receiver interrupt.
Попробуй очищать буфер после приёма каждого пакета:
void flush_rx_buffer(void){
#asm
Flush: SBIS 0xB,7
ret
in r16, UDR
rjmp Flush
#endasm
}