OK, thanks to some big help from Deepak, this is all sorted out.
Essentially, my 2.0 db was corrupted, and even though it looked like it had all the correct FK constraints, it didn't. Because there were too many to fix manually we had to reload my whole db into a properly structured 2.0 db. Here are the steps we followed:
1. Dumped all of the data only from my db
2. I had some custom value fields in my db (custom value tables start with civicrm_value_), and since a new CiviCRM 2.0 database wouldn't have these tables, I needed to dump just the structure of my custom value tables. i did not dump the structure for any other tables.
3. I created a new, empty database
4. Import civicrm/sql/civicrm.mysql into my empty database from CiviCRM 2.0 (NOT 2.1). This gave me the correct 2.0 database structure.
5. Imported my structure dump from step 2 into my new database.
6. Ran the following query on my new database to add a column that existed at one point in 2.0 but no longer does. Without this step, the next step was failing for me.
ALTER TABLE civicrm_group_contact ADD loc_block_id int(10) unsigned default NULL;7. Imported the data dump from step 1 to my new database. This gives me a correct 2.0 database with all of my data in it.
8. Ran the upgrade script, which completed successfully.
9. Ran the following query to remove the column I added in step 6:
ALTER TABLE `civicrm_group_contact`
10. Followed the rest of the Drupal upgrade to 2.1 instructions to complete the upgrade.