A solução que funcionou para mim é ativar e desativar o dispositivo de entrada.
Primeiro, você encontra o dispositivo de entrada que está se comportando mal:
foo@machine:$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ TPPS/2 IBM TrackPoint id=12 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Sleep Button id=8 [slave keyboard (3)]
↳ Integrated Camera id=9 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=10 [slave keyboard (3)]
↳ ThinkPad Extra Buttons id=13 [slave keyboard (3)]
Então você ativa e desativa esse ID, para mim, sempre foi o Synaptics TouchPad (ID = 11):
foo@machine:$ set-prop 11 "Device Enabled" 0
foo@machine:$ set-prop 11 "Device Enabled" 1
E agora está tudo funcionando novamente, eu acho que isso é definitivamente um bug. Eu o observei aleatoriamente em três laptops diferentes, mas não tive a chance de depurá-lo.