This example fails because the op find_method uses Parrot_ex_throw_from_c_args, that handles the exception in an inner runloop. From an opcode is better to use Parrot_ex_throw_from_op, wich jumps to the handler in the current runloop.
I'm working on a patch that defines the helper function Parrot_ex_throw_from_op_args to simplfy the throwing in cases like this. But we still need a way to handle the exceptions thrown from C.