É porque o Bash se comporta de maneira diferente quando $0 é sh .
De Comportamento do Bash [Wiki do Bash Hackers] :
% bl0ck_qu0te%Mais informações podem ser encontradas no Manual de Referência do Bash: Modo Bash POSIX especificamente:
% bl0ck_qu0te% é por isso que o script sh está falhando, pois a sintaxe <(..) está usando a substituição do processo.