O problema que você enfrenta vem do fato de que rsync produz erros para o erro padrão (descritor de arquivo 2), mas o pipe por padrão transfere apenas a saída padrão (descritor de arquivo 1), deixando o erro padrão intocado. Então o comando após o pipe ( sed ou grep em seu exemplo) não vê erros que vieram de rsync .
Você pode redirecionar stdout e stderr usando |& aka 2>&1 | . Outra abordagem é redirecionar somente o stderr, deixando o stdout onde ele apontava, então tente algo como:
rsync ... |& grep --color '.*rsync:.*'
ou
{ rsync ... 2>&1 >&3 3>&- | grep --color '.*rsync:.*' 3>&-; } 3>&1
A segunda abordagem é um pouco complicada porque precisamos redirecionar temporariamente o stdout para algum lugar (para descritor 3 neste caso) para não passá-lo para o grep .