And almost immediately after I posted this, I stumbled on the answer.

So for anyone else that may run into this issue, you need to cast your ordinal index as a long, so:

recordset->GetFields()->GetItem(0)

wont work, but:

recordset->GetFields()->GetItem(long(0))

will.

Grrr...