So looks like resetting the wallet is working, but for larger wallets I have to reset it 2-3 times to extract the full balance. The listunspent amount typically doesn't reflect the full getbalance after a single reset. Not sure if its because of the amount of transactions or not waiting long enough, but at least its working.
The most likely cause of this is pay-to-self billets (from merge transactions or transaction change) that have not yet been detected as cleared. These should show with zero confirmations in listtransactions, and polling their receive addresses using cc.poll_destination should make them clear faster.
This should also resolve itself if the wallet is left running and connected to ccnode long enough. And while the wallet is designed to hold many transactions, it will probably run a little faster and more efficiently if the balance is sent to a fresh wallet that doesn't contain all of the mint activity.