No uses copy, mejor usar
move_uploaded_file. Esta función fue hecha específicamente para subir archivos, y se asegura de que el archivo que intentás mover es un archivo subido.
Para evitar la sobreescritura, basta con que uses
file_exists() para comprobar si el archivo ya existe.
Si te devuelve que el archivo existe, simplemente no hacés el move_uploaded_file
Saludos.