Jesus, debo andar medio dormido. El problema es que en move_uploaded_file() y en is_uploaded_file() estas usando $_FILES['archivo']['name'] para referirte al fichero subido. Pero lo que tienes que usar es $_FILES['archivo']['tmp_name'] que es la ruta temporal donde se ha guardado el fichero.
Saludos. (me vuelvo a

)