I've more or less confirmed that metacity is at fault: I've copied /usr/bin/metacity from a Lucid machine to /tmp and ran "/tmp/metacity --replace". This causes the Lucid version of metacity to take over. I've not had any corruption with that version (it's a miracle that it works with Natty's libraries, taking into account that it's a year older, but it does!).
I've more or less confirmed that metacity is at fault: I've copied /usr/bin/metacity from a Lucid machine to /tmp and ran "/tmp/metacity --replace". This causes the Lucid version of metacity to take over. I've not had any corruption with that version (it's a miracle that it works with Natty's libraries, taking into account that it's a year older, but it does!).