We had a similar problem copying files between servers on two of our campuses via SCP. After a while the connection just stalled out and hung. The problem turned out to be SCP and SFTP interacting a bug in the SACK (Selective Acknowledgment) algorithm used in Linux. We turned it off on the two endpoints using the following addition to /etc/sysctl.conf:
# Turn off SACK net.ipv4.tcp_sack = 0
and execute "sysctl -p" to apply it. You can also use "sysctl -w net.ipv4.tcp_sack=0" to turn it off temporarily. Our file transfers worked just fine after the change.
I realize there are differences our situation and yours and this might not work in your case. Given the length of this thread, though, it might be worth a try!