Yes! NCrunch keeps a snapshot store on the grid node full of recently uploaded projects. It will re-use these snapshots for new connections, so it won't need to upload files again.
It does also go through some pain to re-use files between snapshots. If you have a DLL that is used for several solutions, NCrunch will only copy this DLL up to the grid node once. As soon as the DLL has been uploaded and placed in the snapshot store, the grid node will simply copy it around locally as needed without using more bandwidth.
The uploading of files also uses compression, which is fairly effective as source code often compresses well.
One of the goals behind the distributed processing design was to allow it to work over a 3G connection.