I believe that the AVR has no 16 bit read or write instruction. If so, then to read or write a RAM variable larager than a byte which can be altered by an interrupt routine, one needs an atomic access method. If there indeed is no 16 bit read/write, I guess you have to surround such an access at the application level with cli() and sei() or in more detail, the bit for the potentially impacting interrupt source.
The compiler does have an atomic read/write for 16 bit I/O registers.
Perhaps I've overlooked something that's in the compiler macros.
My misbehaving code is behaving now, after (duuuuuuuuh!) making accessses atomic.