User registration creating duplicate contact in CiviCRM
That doesn't seem to reflect experience i have had with this. Creating a Drupal User should create a row in UF Match table with the civi contact with that email, and if there are multiple civi contacts with same email i thought it opted for the one with lowest cid.

If you can't figure what is mis-firing (and have a look at your civicrm_uf_match table if you haven't already just to confirm what is in there) there are possible workarounds to try, eg use a webform, confirm that you can ensure that a match on email, or first+last+email is working in that context, and then you can use civicrm_entities and drupal rules to trigger the drupal user creation - old-ish blog here about process