Você configura os redirecionamentos na ordem errada. A saída padrão da segunda substituição de processo (que prefixos com stderr:
) tem sua saída padrão prefixada pela primeira substituição do processo, porque foi executada posteriormente.
Tente isso:
exec 2> >( while read line; do echo " stderr: $line"; done )
exec > >( while read line; do echo " stdout: $line"; done )
echo "rolo"
echo "cholo" >&2
Isso gera
stderr: cholo
stdout: rolo
que é o que eu presumo que você quer.