The SDK documents E32USER-CBase 65 as
The panic is raised as a result of a call to the Pop() and PopAndDestroy() static member functions of the CleanupStack class. The panic occurs when an attempt is made to pop more items from the cleanup stack than are on the cleanup stack.
That’s not true. E32USER-CBase 65 is triggered from PopAll() or PopAndDestroyAll() if the current cleanup stack is not the one for which TRAP was called. PopAndDestroyAll() is called when you call User::Leave().
I triggered this when I had no new TRAP() around a leaving piece of code after having created a CEikonEnv, which creates a new cleanup stack.
Simple thing, but the documentation pointed me in the wrong direction so took a while to figure out.