I'm no expert on OP-Codes but that doesn't seem to be always the case.
Nothing you've shown me contradicts what I think is the problem.
So probably B::Xref is better implemented by extending B::Concise ?
That doesn't really make any sense. Both are implemented on top of of B.pm, which presents an op tree as a a connected collection of perl node objects which can be interrogated by suitable perl code. Concise does minimal work, just dumping the nodes in depth-first or execution order.
Xref scans the same structure but does more clever things, which involves trying to keep track of the current line number.
Xref needs fixing by being smarter when scanning sub-nodes associated with nodes which have multiple execution paths.