Is it safe to manually delete the "field_deleted_*" tables and state API data? I'm in an odd situation where the state data that tracks which fields are deleted has a field in it that does not have its associated field_deleted_data_* table. As result, when cron tries to purge the deleted field data, an exception is thrown because it runs a query on a non-existent table.

Is OK to just delete all the remaining field_deleted_data_* and field_deleted_revision_* tables and then delete the two state API rows from the key_value table, field.field.deleted and field.storage.deleted?
Try deleting them cleanly first with drush eval 'field_delete_field("yourfield")' and run cron afterwards.