Answered my own question thanks to a hint from samtregar about eval and $@ (on a different thread!).
It needed
$compartment->permit( qw( entereval ) );

the nested eval was trapped by the opcode mask of the first eval.

In reply to Re^2: nested Safe->reval and method from custom Module by jeremyh
in thread nested Safe->reval and method from custom Module by jeremyh

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":