Ну все правильно. Вызов прерывания с вектором UART0TX_VECTOR сбрасывает флаг UTXIFG0. А у вас по окончании пакета при выполняющемся условии
Код
if (out_buffer.head == out_buffer.tail)
в TXBUF0 ничего не записывается. Чтобы UTXIFG0 был установлен для вызова прерывания нужно либо его установить программно, либо что-то записать в TXBUF0.
Т.е. вместо (или вместе) с
Код
U0IE |= UTXIE0/* + URXIE0*/; // Разрешим прерывания от UART
нужно выполнить
Код
IFG0 |= UTXIFG0;