Com base nos comentários da minha pergunta original, faça a saída do rsync para stdout com o sinalizador -i e use uma condição de verificação sem cadeia de caracteres para ver se algo realmente foi alterado na verificação do código de erro. Envolver o comando rsync em uma variável permite que a verificação seja feita.
RSYNC_COMMAND=$(rsync -aEim --delete /path/to/remote/ /path/to/local/)
if [ $? -eq 0 ]; then
# Success do some more work!
if [ -n "${RSYNC_COMMAND}" ]; then
# Stuff to run, because rsync has changes
else
# No changes were made by rsync
fi
else
# Something went wrong!
exit 1
fi
Potencial desvantagem, você tem que perder a saída detalhada, mas você sempre pode registrá-la em um arquivo.