Well, I have no idea why this is the case, but if I use tail -F instead of cat to read the AT command responses on /dev/ttyUSB2, it works just fine. I’ve just made this substitution in my shell script and it provides identical functionality.
tail -F
cat