The exact details of how to synch with the CRM are pretty configurable, but in a sort of standard, vanilla setup it works like this:
Eloqua contacts are associated with CRM contacts and/or leads by storing the id number of the contact/lead from the CRM in fields on the Eloqua contact record. There are separate fields for contact ID and lead ID. When Eloqua first synchs with the CRM, it pulls contacts and leads from the CRM and attempts to match them to existing Eloqua contacts by email address. When it finds a match, it writes the appropriate ID number into the appropriate field. Subsequently, records are pulled in from the CRM only if they change in the CRM.
So I think this is how your three scenarios would work:
Scenario 1: The Eloqua contact will be associated with both the CRM lead and the CRM contact. If the contact is updated from Eloqua to Salesforce it will update both the contact and the lead, and associate both with any CRM campaign you have. Personally I find this behavior undesirable, so I have a step in my contact washing machine to remove the lead ID if both lead ID and contact ID have values.
Scenario 2 and Scenario 3: The Eloqua contact will be associated with one of the duplicate CRM contacts/leads pretty much at random. That record will be updated from Eloqua, the other will not. You can find out which one by looking at the appropriate ID field, and you can change it by hand if you need to. This behavior works OK for us so I didn't mess with it.