After struggling with this problem myself for a long time (uploading large courses through the web interface is far from optimal) I came across this thread with the suggestion to use the File System Repository (Moodle 2.1).
When I first used this I ran into some other trouble. After some (well, half a day LOL) debugging I found out that the ZipArchive functionality (a PHP thing) was returning error code 19 (ZIPARCHIVE::ER_NOZIP) when trying to open the Moodle backup file (like mentioned earlier this is just a ZIP-file).
This is exactly what is described in this bugreport. However, I did not solve this by upgrading the libzip thingy. The cause for the restore functionality to fail was most likely a corrupt ZIP-file (if you try to unzip this file on the prompt of your webserver and you get "file #XXXX: bad zipfile offset (local header sig): YYYYYYYY" errors there is a good chance your ZIP-file went bad when uploading it, perhaps because you uploaded it in ASCII-mode). Solution: re-upload your zipped course (EDIT: in binary-mode) inside your repository and try again.
Also make sure your script timelimit is high when restoring a course or you might be staring at a blank screen after a time. Use set_time_limit() and/or configure your web platform to deal with long running scripts.
Hope this helps someone and saved you the frustration.