Lo que hace ese script es primero subir el archivo a una carpeta temporal y posteriormente (si se subió) moverla a la carpeta final.
Precisamente con
is_uploaded_file($_FILES['userfile']['tmp_name'])) verificas que se haya subido a la carpeta temporal... ve que también le cambia el nombre al archivo en esa carpeta:
['archivo']['tmp_name']... vaya!... creo haber entendido que el problema precisamente era que no se podian subir archivos de este forma...
Así que... la verdad dudo que puedas hacerlo...
copy()?... no, debe hacer solo lo equivalente a move_uploaded_file() ... creo no se podrá
...
Suerte!, ojalá me equivoque.
Edito:
Si haces un phpinfo() ¿cómo esta el estado de
file_uploads?