What finally worked was stealing a hint from Apache2::SubProcess' docs.
In the mod_perl script, I just do qx($command 2>&1)
although other methods might work too.
Then in script being called in $command, I simply put these lines before the httpd restart:
use POSIX 'setsid';
setsid or die "Can't start a new session: $!";
It doesn't ever return to the mod_perl script, which is fine, since I redirect to a log-display page anyway.
Meanwhile the restart-containing script produces the log correctly through the same old STDOUT redirection I had in there before, and e-mails me if something die
s.
Furthermore, the restart-containing script works normally from the command-line, as it was also designed to do.