Nunca use *
no caminho de origem do rsync, o rsync é perfeitamente capaz de encontrar essas entradas em si.
Ao fazer isso, você efetivamente chamou o rsync de
rsync --dry-run \
--include="*" \
--include='top/' \
--include='top/dir1/' \
--include='top/dir1/***' \
--exclude='top/*' \
--exclude="*" \
-av from/file1.txt from/file2 from/top .
Os padrões de inclusão e exclusão são relativos à raiz de origem; então os padrões --include 'top/'
etc. nunca serão iguais.
Faça isso:
rsync --dry-run \
--include="/*" \
--include='/top/' \
--include='/top/dir1/' \
--include='/top/dir1/***' \
--exclude='/top/*' \
--exclude="*" \
-av from/ .