What you're seeing here is an 'x' of the print's return value, which is of course 1 since the print succeeded. We can expand the replacement eval with a crude check for the function being a print, in which case we leave $onetimeDump off.
sub smarter_eval {
local $onetimeDump = 'dump'
if $_[0] =~ /\Aprint\s*\(?/;
old_eval(@_);
}