I am trying to understand the history of my codebase, which resides in TFS 2005, and I encountered a changeset where all changes were marked as both branch and merge.
Merge can be combined with anything except Add. On its own, Merge just means that (1) whatever happened is the result of invoking the Merge command (2) when you checkin, TFS will record the appropriate merge history metadata in addition to the changes themselves. The remaining operation(s) in the list of changetypes tells you exactly what kind of change is being applied to the target item. Thus:
Merge, Branch = an item that exists in the source branch but not the target branch is being copied over to the target for the first time
This might make sense if the file were created during a branch operation and changes from the source branch were then merged into the new branch without having checked in at any point.