I discovered that if I modified the PG code to take the (default) grader out of the safe compartment (as seen in original form below), it actually returns the correct values. Do you know how I can get error/log messages to bubble up out of the safe compartment?
($self->{rh_problem_result},$self->{rh_problem_state}) =
$self->{safe}->reval('&{$rf_grader}($rh_answers,$rh_state,%rf_options)');
I haven't dug any further yet.