Some of these are intentional, though for potentially varying reasons.
As an example, the email bounce tables are generally tied to the email first and foremost. The user ID then follows from that. In the log table, the user ID is explicitly a snapshot in time. When merging users, we don't change the email address so it doesn't necessarily make sense to attach this record to a user that never had the email address. The soft bounce table uses user ID, but it's an extension of the main log table.
The TFA elements are similar. Indeed merging that could entirely break someone's account. It would be equivalent to updating their password with the source user's. Custom user fields also fit this pattern as we don't merge profile content.
In other cases, there's some debate as to whether we should be moving data over and it may vary depending on the specific use case. I think notice dismissal, drafts and read records follow here. I think with merging we still need to recognize that the users have been separate and a merge isn't always going to be identical to the same user having taken every single action/page view.
However, given that we move thread watch records, forum watch records should come over as well. Upgrade log is a reasonable change as well. We do actually move follow and ignore records, so this could just require a cache rebuild. The thread user post summary could be handled better.