Fixed
OK.
Here's what I did. This needs an internet connection for step 2.
1. Boot from Ubuntu live CD
2. apt-get install lvm2
3. vgscan
4. vgchange -ay
5. mkdir target
6. mount /dev/Ubuntu/root target
I have downloaded the relevant image, modules, and restricted modules packages and copied them to my USB key.
7. cp /media/USBKey/*.deb target/root
8. Reboot into "broken" system
9. dpkg -i *.deb
10. Reboot, and we're back on the air.
The problem seems to stem from the fact that /boot is defined in fstab using a UUID. I suspect that this UUID doesn't match the actual UUID, so the boot directory on / gets mounted, not the one on sda5; grub, however, only sees the one on sda5 when it starts up. Hence the kernel dichotomy.