Indeed:
bool CTransaction::ConnectInputs(CTxDB& txdb, map& mapTestPool, CDiskTxPos posThisTx,
CBlockIndex* pindexBlock, int64& nFees, bool fBlock, bool fMiner, int64 nMinFee)
nFees is passed as a reference, so it is updated

Will look further, I suspect some edge case in the calculation of the fees. That would be why this error only occurs in a busy game and not in a test setup.
I still would place a debug output at line 1320, detailing vtx[0].getValueOut() and GetBlockValue()