É um comportamento normal. Em ambos os casos, sed sai com error code 4 ... por info sed :
4
An I/O error, or a serious processing error during runtime,
GNU 'sed' aborted immediately.
e em ambos os casos, as mensagens são auto-explicativas. Não sei ao certo o que não está claro, mas para o registro: na primeira vez que ele errar porque não pode editar um diretório e na segunda vez que ele reclama porque não pode editar stdin no local, ele precisa de um arquivo (isto é, remover esse redirecionamento antes de $file )
A maneira correta de fazer isso com find é, como você observou, via -exec ...
Com globs, você terá que usar um loop e testar se a entrada for um arquivo regular antes de executar sed . Ou, se você for um usuário zsh , basta fazer:
sed -i 's/foo/bar/g' *(.)