I think that should be greater than in the comparison? You want it to fail if the the height of the UTXO plus the sequence number is greater than the spending block's height.
There should be an exception for final inputs. Otherwise, they will count as relative locktime of 0xFFFFFFFF. Is this check handled elsewhere?
if (!tx.vin[i].IsFinal() && nSpendHeight < coins->nHeight + tx.vin[i].nSequence)
return state.Invalid(false, REJECT_INVALID, "bad-txns-non-final-input");