Fixed thanks to my LBS mechanic.
He noticed that the cassette lockring was actually touching the chain (usually there would be a very small gap).
I mean that the chain wasn't sitting fully on the smallest sprocket because it rested on the lockring first. This allowed the chain to slip off the teeth of sprocket, especially under load.
This is 100% my fault. When I swapped cassettes between wheels I obviously mixed up the 2 "identical" lockrings. Fitting one with a slightly smaller diameter didn't have any effect on the other bike but fitting a larger one did. The size difference isn't something you would notice, at least I didn't, I assumed thay they would all be the same size.
Motto: Don't mix up your lockrings and, when all else fails, don't be afraid to ask your local LBS.