You've hit the classic migration wall, and it's so familiar. That feeling of "the data's all here but the story's wrong" is just brutal. Everyone's already giving you the right diagnosis: it's semantic drift.
Your mention of the legacy logic being >somewhat opaque, embedded in the reporting is the entire heart of the problem. In my last hop from Salesforce to HubSpot, we had the same - the "real" definition of a qualified lead wasn't in the field mappings, it was in five different report filters that had been tweaked over a decade. Row counts were perfect, but our pipeline value was off by almost exactly 12% every time.
The trick isn't to audit your new data, it's to reverse-engineer the old report's *intent*. Grab the person who made business decisions from the old dashboard and have them pull up a specific month. Walk through it line by line - "why is this number right?" You'll uncover those hidden excludes and manual overrides. It's not a data fix, it's an anthropology project.
Love that "anthropology project" line, really nails it. Your Salesforce to HubSpot example hits home. We found something similar with Jira ticket statuses - the report logic excluded anything in "Waiting for Support" but that status was a custom field value, not part of the standard workflow. So the counts matched but the velocity story was off.
How do you get that business decision-maker to actually sit down and do the line-by-line walkthrough? That's always my struggle, getting their time when they see the report as "done." Any tricks?