Isso depende do shell e não está documentado no AFAICS. No kshe bash, no primeiro caso, foocompartilhará o mesmo padrão que bar. Eles vão lutar pela produção de echo.
Então, por exemplo,
$ seq 10000 | paste - <(tr 1 X)'
1 X
2 X042
3 X043
4 X044
5 X045
[...]
Você vê evidências de que pastelê todos os outros blocos de texto da seqsaída enquanto trlê os outros.
Com zsh, obtém o stdin externo (a menos que seja um terminal e o shell não seja interativo, caso em que é redirecionado /dev/null). ksh(onde se originou) zshe bashsão os únicos reservatórios semelhantes a Bourne com suporte para a substituição do processo AFAIK.
Em echo "bla" | bar < <(foo), observe que baro stdin será o tubo alimentado pela saída de foo. Esse é um comportamento bem definido. Nesse caso, parece que foostdin é o tubo alimentado por echotodos ksh, zshe bash.
Se você deseja ter um comportamento consistente em todas as três conchas e ser à prova de futuro, pois o comportamento pode mudar porque não está documentado, eu escreveria:
echo bla | { bar <(foo); }
Para ter certeza foo, o stdin também é o cachimbo de echo(não consigo ver por que você faria isso). Ou:
echo bla | bar <(foo < /dev/null)
Para se certificar de fooque não ler a partir do tubo de echo. Ou:
{ echo bla | bar 3<&- <(foo <&3); } 3<&0
Ter foostdin o stdin externo como nas versões atuais de zsh.