Не увидел в вашем прерывании чтения UDR, по которому контроллер понимает что байт прочитан и снимает флаг прерывания. Ну или можете попытаться сами снять флаг, но это сложнее.
Цитата:
Попробуйте отключить прерывание при вхождении в USART_RXC_vect. Потом снова включить перед выходом из обработки прерывания.
Без крайней нужды так делать не стоит. При входе в прерывание глобальные прерывания автоматически запрещаются, потом перед самым выходом вы их вручную разрешаете, но остается небольшой зазор, когда прерывание уже разрешено, но еще не завершилось, то есть не освободило стек. И если в этот момент возникнет еще одно, а потом еще... В общем, срыв стека так и выглядит.