when a user goes to update the addressbook after logging in (adding or editing addresses) they get an extra ?> showing up inside the inner table.

The code that is doing this is in includes/modules/address_book_details.php

Code:
<?php /* LINE CHANGED: MOD - Country-State Selector */
//          <td class="main"><?php echo tep_get_country_list('country', $entry['entry_country_id']) . ' ' . (tep_not_null(ENTRY_COUNTRY_TEXT) ? '<span class="inputRequirement">' . ENTRY_COUNTRY_TEXT . '</span>': ''); ?></td>
?>
That trailing ?> is being ignored because the ?> in the commented out line is getting read and processed as the closing ?> for the opening <?php in the LINE CHANGED: MOD line.

The quick fix is

Code:
<?php /* LINE CHANGED: MOD - Country-State Selector */
//          <td class="main"><?php echo tep_get_country_list('country', $entry['entry_country_id']) . ' ' . (tep_not_null(ENTRY_COUNTRY_TEXT) ? '<span class="inputRequirement">' . ENTRY_COUNTRY_TEXT . '</span>': ''); ?></td>
remove the ?>

Please note that this is VERY BAD coding style. It does get rid of the displayed ?> A better way to handle this is just to cut all the commented out from the module. This will lose the change history maintained in the file, but you can always create a backup of the file in the modules directory ( modules/__address_book_details.php) for historical purposes before cutting the lines.