I'm fairly certain this is due to problems with the way backports.ssl handles reads. There have been similar problems reported by other people. Whether the problem occurs seems to depend on the exact size of reads etc (which is why you're not seeing it consistently).
All the more reason to get 2.0 out the door.
After posting, I thought about the backports.ssl hint. I just tried with imapclient current master (1a099f3), and it is working fine indeed. (I thought for a while that is was not working neither, but I realized when writing down the message that I was sending 9Mo and not 1Mo with my command ('Test test' * 10⁸ length is definitely not 1 * 10⁸) with a 30s timeout. Using some an asymmetrical connection with 1mbps of upload, it makes sense.) Re-installing imapclient from pypi (so the 1.0.2 release), the problem is occurring again. I don't know what it is really happening, but if imapclient 2.0.0 can solve the problem, it is enough for me indeed.
I strongly +1 your argument about settings two different timeouts time. When setting up credentials, I am using a different timeout for just tesing the connection (EHLO/LOGIN/EXIT), but I would feel more reliable if the connection timeout was clearly separated from the read/write operations one!
inbox@... :: http://menno.io/