I don't think you can capture/handle exit codes of subshells anyway, right? I've been operating under that assumption for years, and just don't do subshells if I can avoid them.
? Expands to the exit status of the most recently executed foreground pipeline.
$ foo="$(echo foobar ; exit 3)" ; ret=$? ; echo "output: $foo" ; echo "return status: $ret"
output: foobar
return status: 3
Also, PIPESTATUS is an array with the return status from each command in a pipeline.