Você precisa excluir o padrão de vários níveis antes de incluir */
, pois o último significa "incluir todos os diretórios", substituindo a exclusão posterior. Você também precisa adicionar um nível extra, pois */
indica um diretório e /*/*/*/
significa "excluir três ou mais níveis".
O comando se torna:
rsync -azv --exclude='/*/*/*/*/' --include='*/' --exclude='*' --exclude=cache/ source/ destination/
(como o Wildcard já comentou, você deve sempre citar ou escapar dos metacaracteres do shell.)