The coin control dialog has a single static CCoinControl object (declared in CoinControlDialog::coinControl) that it uses for all purposes.
This causes an inappropriate mixing of state between different wallets, when multiple are loaded at the same time and you flip back and forth between them while using coin control on the sending page.
For example, pick a wallet, use coin control to select a UTXO, hit OK. Then switch to a different wallet – so far nothing will be wrong – but now open coin control again. The UTXO in the other wallet is still selected (it will show in the summary at the top), but is not visible and can’t be unselected. If you now click ‘ok’, the main send pane will show that there is a UTXO (from the other wallet) selected.
I can’t reproduce this 100% reliably, but if I have several wallets open I can reliably make “weird broken shit” happen with a few tries.
When I try to perform a send in this state (having selected a UTXO that does not belong to the current wallet) I get an insufficient balance error (even though both the current wallet and the selected UTXO have sufficient balance.)
I think the only reasonable and correct way to fix this is to rip out the static CCoinControl object, and replace it with a per-wallet one. I am happy to do this … at some point.