byuu, could you test:
if(((~(i^j))&0x8)&((i^k)&0x8))
set_overflow();
where i= the high nibble of the Accumulator, j = high nibble of the data, and k being the high nibble of the result. That bit of code was given to me many years ago by someone as "correct for known cases" at the time.
ETA: it at least should work for the 0x80+0 case, as well as the 7X cases.