No es una validación correcta esa para un type, es correcta para tomar la extensión (de hecho es la que recomiendo siempre), pero no para validar el type.
Usa
getimagesize para esa tarea la cual lee las cabeceras del file. No se si sea el problema, pero es lo primero que debes hacer para ir eliminando posibilidades, ej:
Código PHP:
$info = getimagesize($file) or trigger_error( "Error al leer la imagen ". $file, E_USER_ERROR ); # $file es el path completo a la imagen, una vez movido con move_uploaded_file, no lo uses sobre $_FILE[]. Ej del contenido de $file sería: upload/imagenes/mi_imagen.png
if( $info[2] == 3 ){
...
}
De ahí en mas repostea el código completo y el error que te de y seguimos.