Which versions of bzr and Python, out of interest?
This is caused by a Python bug: <http://bugs.python.org/issue8354>.
There's a partial workaround in trunk. I'll backport that to 2.1.x now. Without the workaround the first signal causes no problems, but subsequent ones trigger the interrupted system call error.
Due to the nature of the Python bug, the workaround doesn't fix the case where multiple signals arrive before the interrupted syscall returns control to the Python interpreter.
Given that the fix for Python isn't yet Python's trunk (let alone a released version of Python) we may need to reconsider using SIGWINCH at all, or perhaps write a C extension to handle it rather than Python's flawed signal handling.
See also the discussion at <https://code.edge.launchpad.net/~spiv/bzr/i-hate-signals/+merge/23004>