Why do I need to wait a few moments before sending serial data on my AVR?
Basically what you do in 

// enable transmitter
UCSR0B |= (1 &lt;&lt; TXEN0);

_delay_ms(10);  // XXX


is inserting 10ms of stop bits (1). This helps your receiver to synchronize with the data stream (which conveniently starts with a start bit 0). Until then the AVR pin is high impedance and filling your input buffer with garbage to which your receiver is trying to synchronize. 

Every time the receiver reads 10 bits that fit the frame (start-bit 0, 8 data bits, stop-bit 1) the data bits are pushed in the input buffer. Only when the frame doesn't match, bits get discarded until it does find a matching 10 bit string.

This also explains the importance for using start and stop bits in asynchronous transmission.  This also explains why using 1.5 or 2 stop bits improves speed of synchronization; the probability of received data accidentally fitting the frame for a single byte decreased.