Now we're getting somewhere.
I do have:
contacts linked to campaigns in SFDC (campaign member object)
Eloqua campaigns linked to SFDC campaigns (foreign key)
I do not have contact roles on opportunities -- fewer than 1% have this. I was confused because we do place a contact on an opportunity, via a custom lookup field, but this is outside of the context of roles.
Is that why CLR doesn't work for me?