Aber auch ein einfaches "scp -r <remote host>:/usr/share/man ." (viele kleine Dateien) drückt die Übertragungsrate reproduzierbar auf ca. 40 kB/s runter.
Das ist sicherlich der schlechteste Fall/Ansatz, da scp nicht inkrementell arbeitet. Sowohl Borg-Backup (welches ich nicht nutze) als auch rsync via ssh (welches ich allerdings ausschließlich für größere Archiv-Dateien und Netcup-RS nutze) sollten hier besser abschneiden.
Eine weitere Möglichkeit, wenn Änderungen schon allein am letzten Modifikationszeitpunkt festgemacht werden können (vgl. find -mtime), wäre, nur die betreffenden Dateien zuerst lokal zu archivieren und dann dieses Archiv via scp zu übertragen (unter der Voraussetzung, dass verschachtelte Lese-/Schreiboperationen in Summe mit der Übertragung von einer/wenigen "maximalgroßen" Archivdatei(en) schneller sind, weil hier ggf. ein Caching ausgenutzt werden kann).
Bei Platzmangel hat tar die Möglichkeit, das zu erstellende Archiv in Teile zu schneiden, welche beliebig groß sein können (vgl. tar --multi-volume --files-from=$(find ...)) und diese Teile können während ihrer Erstellung auf /tmp (=RAM-Disk!) liegen, bevor sie (ggf. einzeln komprimiert und ggf. auch nochmals verschlüsselt; das geschieht über ein Script, welches man tar via --new-volume-script übergeben kann) in einem Zielverzeichnis landen, welches ggf. direkt via sshfs/GlusterFS o. Ä. "auf den heimischen Rechner verweist". Damit entsteht im Rahmen der Archivierung keinerlei Dateisystem-Overhead auf dem VPS (=temporär belegter Platz auf der virtuellen Platte) und die resultierenden Teilarchive sollten mit maximaler Geschwindigkeit übertragen werden können. Ich selbst nutze diesen Ansatz in abgewandelter Form zusammen mit rclone statt sshfs, um Archive in der Cloud abzulegen und jedes Teilarchiv (über das vorgenannte Script) zudem via par2 vor Bitrot zu schützen.
(Der Vollständigkeit halber: Bei rclone gibt es i.d.R. einen lokalen Dateisystem-Overhead, da man hier einen Festplatten-Cache verwendet; diesen kann man allerdings begrenzen.)