Isso seria um erro ou uma limitação em bash . De alguma forma, bash fecha o descritor de arquivo 63, que era o final de leitura do canal no qual echo está gravando antes de executar fgrep .
zsh ou ksh93 não tem essa limitação.
Neste caso, você não precisa dos dois processos:
ff() { fgrep -f "$1" < /etc/group; }
No caso geral, você pode usar outro shell ou contornar a limitação bash com:
ff() { sh -c 'cat /etc/group | fgrep -f "$1"' sh "$1";}
Ou:
ff() { cat /etc/group | fgrep -f /dev/fd/3;} 3<"$1"