Se você usa diff, ele sempre lê o conteúdo do arquivo para pegar quaisquer diferenças entre o conteúdo.
O Rsync, por padrão, não lerá o conteúdo dos arquivos se o nome do arquivo, a hora da modificação e o tamanho do arquivo entre os dois forem os mesmos. Se estes são os mesmos, assume que o conteúdo do arquivo é o mesmo e não se incomoda de lê-los. Isso tornará as ordens de magnitude mais rápidas em diretórios que já são os mesmos (ou quase o mesmo).
Na maioria dos casos, esse comportamento não é um problema, já que seria muito raro um arquivo ter sido alterado antes e depois da sincronização, ambos dentro da mesma janela de 1 segundo para ter a mesma hora de modificação, e mantém o mesmo tamanho de arquivo. E mesmo que isso acontecesse, seria raro que isso importasse muito.
Você pode forçar o rsync a sempre ler o conteúdo do arquivo, independentemente do tempo de modificação (ou tamanho), usando a opção de linha de comando --ignore-times
.