Yo uso el siguiente script y no me falla y esta mas sencillo que el que tienes
Código PHP:
$extension = $_FILES['userfile']['name'];
if ($newname != "") {
@copy("$userfile" , "/dondelovasaguardar/$newname.$extension")
or die("No se logro subir su archivo.");
Lo que hace subirlo con un nuevo nombre, en este caso es $newname y despues le concateno la $extension
Espero te sirva
Saludos