And...this problem goes away if I run the same "tail -f" or "read -t 1" loop on a text-only TTY, or under a "screen" session within a terminal emulator.
So it's probably a problem with the terminal emulators (MATE terminal and konsole). I'm guessing screen is able to insulate the TTY environment from the GUI emulator enough to sidestep this problem.
And...this problem goes away if I run the same "tail -f" or "read -t 1" loop on a text-only TTY, or under a "screen" session within a terminal emulator.
So it's probably a problem with the terminal emulators (MATE terminal and konsole). I'm guessing screen is able to insulate the TTY environment from the GUI emulator enough to sidestep this problem.