I have some more information on this. In the latest test,
the problem occurs when I run bash under rxvt, but not when I run it under xterm.
Using strace, I've found a difference in a call to rt_sigaction(). It calls
rt_sigaction(SIGTSTP, {SIG_DFL, ...})
under xterm (which works correctly), but
rt_sigaction(SIGTSTP, {SIG_IGN, ...})
under rxvt (where it doesn't).
I've been playing with rxvt and urxvt lately, which might explain why I've seen the problem. Apparently there's some
difference between xterm and rxvt in the way they invoke the shell.
Details at: