Você pode configurar o rsync para fazer coisas como ignorar arquivos que já existem, o que evitará algumas das rotinas de atualização de metadados que você está preocupado. Suas preocupações sobre isso provavelmente são exageradas. Se apenas uma pequena parte do arquivo foi alterada, somente essa parte será atualizada; o algoritmo rsync principal descobrirá que a maior parte é a mesma. Você pagará uma sobrecarga adicional para ler os arquivos ao longo do caminho, mas talvez você possa usar "--ignore-existing" na maior parte do tempo e fazer apenas a forma mais longa de sincronização que tenta classificar todas as alterações com menos frequência.
Eu escrevi um artigo chamado Introdução ao rsync, para o paranóico que tenta explicar algumas das partes enigmáticas de como ele decide o que vai fazer. Há um monte de opções aqui, e o único que você quer que ele não forneça é a capacidade de definir um limite para uma diferença de tamanho grande para acionar um conjunto diferente de regras. Parece-me que aconteceria raramente o suficiente para que você pudesse planejar uma dessas sessões de sincronização mais longas periodicamente para cuidar disso.
Eu também mantenho alguns dados como este no git. Eu não tenho certeza porque você está tão preocupado com o fato de que ele armazena diffs binários. Você deve poder remover as informações antigas de seu repositório e depois compactá-las periodicamente, se essa sobrecarga o incomodar. O git é bom em lidar com o problema de renomeação para evitar que isso aconteça: se você simplesmente move algo de um lugar para outro ou muda seu nome, se ele é realmente o mesmo arquivo git irá descobrir isso e não salvar uma nova cópia isso.