It is indeed caused by a bug.
Likely it is a side-effect of this bug (which I have yet to track down), and when such a dead-locked character is queued to change inactive state, it locks up the process that handles those inactive state changes.
Restarting the service unlocks all characters and resolves the issue.