EL nombre con el que se guardará lo podés especificar en la función
move_uploaded_file(), con su segundo parámetro.
Una forma infalible y simple para evitar los nombres duplicados es guardar el archivo usando la
suma md5 del mismo como nombre. Como 2 archivos
en teoría no pueden tener el mismo md5 a menos que sean idénticos, eso te soluciona el problema.
Saludos.