FWIW (which might not be much, this close to blessing 2a as the default format)...
Attached is a simple reproduction of what I think is the same problem, using bzr.dev r4596 (which is approximately 1.18rc1, not sure exactly). I'll summarize here. (The attachment contains the requested xml_string and locals() output from the debugger, along with a stack trace.)
To reproduce, create a branch (either standalone or shared-repo is fine), add file called "a^Gb" (literal CTRL-G character), and commit.
pack-0.92 and 1.14 demonstrate the problem; 2a does *not*; I haven't tried other formats.
Once you've got a branch in this state, "check" fails. "log" succeeds, but "log -v" fails.
Importantly, "upgrade --2a" also fails. Thus, the fact that 2a itself doesn't suffer from the problem is little consolation to people with older branches that do suffer from it.
Here's a clue to a possible fix: "co" fails, but if you remove the file from your working tree (assuming, of course, that you haven't already "remove-tree"ed the latter), "revert" *succeeds* in restoring it. So there appears to be at least one code path that avoids the bug.
Bugs 267670, 346471, and 407303 look superficially like duplicates of this, but I'm not confident enough of that to mark them as such.