Você deve usar tee --output-error=exit-nopipe . Isso ignoraria o erro SIGPIPE e EPIPE de gravação, mas ainda morreria em outros erros.
tee --output-error=exit-nopipe , assim como o warn variant da sua resposta, sai quando não pode gravar em pelo menos uma das suas saídas; mas conta a saída padrão como um deles.
Seus exemplos são problemáticos, porque eles simplesmente despejam a saída de head -c10G /dev/zero | tee ... em seu terminal (que você não pode ver porque o byte nulo é "invisível"); e é por isso que o tee em sua resposta não sai: porque ele ainda estará gravando para stdout depois que as substituições do processo >(...) tiverem saído.
Para sistemas sem GNU tee, uma solução possível é incluir cat >/dev/null nos comandos para os quais a saída de tee é canalizada; mas você não pode fazer isso com todos eles; você terá que decidir sobre uma saída "master" que fará com que tee seja encerrado se a gravação não for bem-sucedida. Exemplo:
$ dd if=/dev/zero |
tee >(dd of=/dev/null count=200; cat >/dev/null) >(dd of=/dev/null count=700; cat >/dev/null) |
dd of=/dev/null count=1000
$ dd if=/dev/zero |
tee >(dd of=/dev/null count=1000) >(dd of=/dev/null count=700; cat >/dev/null) |
{ dd of=/dev/null count=200; cat >/dev/null; }
Ambos devem escrever 200, 700 e 1000 blocos, respectivamente.