First, use move_uploaded_file - it's the "correct" way to do it, and I haven't had any problems with it.
Second, if you're running this locally, look at your PHP temp upload directory and see if the filesize is 0 there. If not, there may be a problem with using copy() instead of move_uploaded_file().
Hope this helps!