I've done a bit of digging, and it looks like the problem has something to do with the value of CompWindow->priv->attrib.border_width being unstable. PrivateWindow::updateFrameWindow() periodically causes the window's border_width to be set to that value (see line 803 of src/window.cpp), and for me that value seems to bounce between 0 and 1, with the xterm display looking correct when the window's border_width get set to 0, and looking corrupted when it is 1. Changing line 803 to just "xev.border_width = 0;" seems to fix the xterm corruption (though, obviously, this is not a proper fix).
I'm still not sure how CompWindow->priv->attrib.border_width is getting changed.
I've done a bit of digging, and it looks like the problem has something to do with the value of CompWindow- >priv-> attrib. border_ width being unstable. PrivateWindow: :updateFrameWin dow() periodically causes the window's border_width to be set to that value (see line 803 of src/window.cpp), and for me that value seems to bounce between 0 and 1, with the xterm display looking correct when the window's border_width get set to 0, and looking corrupted when it is 1. Changing line 803 to just "xev.border_width = 0;" seems to fix the xterm corruption (though, obviously, this is not a proper fix).
I'm still not sure how CompWindow- >priv-> attrib. border_ width is getting changed.