The problem only seems to manifest when the output is captured to a local variable within a function:
$ echo $BASH_VERSION
3.2.48(1)-release
$ false; echo $?
1
$ echo $?
0
$ x=$(false 2>&1) ; echo $?
1
$ function f {
> local x=$(false 2>&1) ; echo $?
> }
$ f
0
$ function g {
> x=$(false 2>&1) ; echo $?
> }
$ g
1
Notice that only function f, which captures x to a local, can express the behavior. Particularly, function g which does the same thing, but without the 'local' keyword, works.
One can therefore not use a local variable, and perhaps 'unset' it after use.
EDIT NVRAM points out that the local declaration can be made beforehand to avoid the issue:
$ function h {
> local x
> x=$(false 2>&1) ; echo $?
> }
$ h
1