Вот вариант с учётом, анализа ошибок загрузки и проверки временного фаила на ноль. Всё работает.
Кстати фаил a.b.c.d.jpg тоже правильно грузится

Поясню про 8 символов - сделано по двум причинам:
1. ограничить имя конечного фаила после bin2hex()
2. можно было и 5,7; 8 символов просто небольшая хитрость и пыль в глаза
PHP код:
$max_image_width = 150;
$max_image_height = 301;
$valid_types = array("jpg", "jpeg", "JPG", "JPEG");
if($post=="Y")
{
// Каталог, в который мы будем принимать файл:
$uploaddir = 'upload/';
$filename1_1 = $_FILES['image_path']['name'];
if (eregi("[а-яА-Я]", $filename1_1))
{
$error_1="<b>Ошибка:</b> <font color=#FF0000>В имени фаила не должно быть русских букв.</font>";
}
else
{
$add=rand(1,10).rand(5,20).rand(3,40).rand(1,100);
$name=substr($filename1_1, 0, strrpos($filename1_1, "."));
$name_hex=bin2hex($name);
$filename2_1 = $_FILES['image_path']['tmp_name'];
if (strrpos($filename1_1, ".") > 9)
{
$error_2="<b>Ошибка:</b> <font color=#FF0000>Слишком длинное имя фаила. Допустимо 8 символов до точки.</font>";
}
else
{
$ext = substr($filename1_1, 1 + strrpos($filename1_1, "."));
$image_path = $uploaddir.basename($add.'_'.$name_hex.'.'.$ext);
if (!in_array($ext, $valid_types))
{
$error_4="<b>Ошибка:</b> <font color=#FF0000>Неправильный тип фаила. Допустимо (jpg, jpeg) или фаил не указан.</font>";
}
else
{
if($_FILES['image_path']['error'] === 0)
{
if(isset($_FILES['image_path']) && is_uploaded_file($_FILES['image_path']['tmp_name']) && $_FILES['image_path']['size'])
{
$size = getimagesize($filename2_1);
if (($size) && ($size[0] == $max_image_width) && ($size[1] < $max_image_height))
{
// Копируем файл из каталога для временного хранения файлов:
if (copy($filename2_1, $image_path))
{
//грузим на сервер и в базу
} else $error_5="<b>Ошибка:</b> <font color=#FF0000>Не удалось загрузить файл на сервер!</font";
} else $error_6="<b>Ошибка:</b> <font color=#FF0000>Неправильные размеры изображения. Измените, пожалуйста, размеры изображения до: ширина = 150px, высота максимально - 300px.</font>";
} else $error_3="<b>Ошибка:</b> <font color=#FF0000>Такого фаила не существует</font>";
}
else
{
if($_FILES['image_path']['error'] === 1)
{ $msg="<b>Ошибка:</b> <font color=#FF0000>Размер файла ".BASENAME( $_FILES['image_path']['name'])." больше максимально допустимого размера, разрешённого директивой upload_max_filesize конфигурационного файла php.ini.</font>"; }
if($_FILES['image_path']['error'] === 2)
{ $msg="<b>Ошибка:</b> <font color=#FF0000>Размер фаила ".BASENAME( $_FILES['image_path']['name'])." слишком большой. Допустимо не более 50Kб.</font>"; }
if($_FILES['image_path']['error'] === 3)
{ $msg="<b>Ошибка:</b> <font color=#FF0000>Файл ".BASENAME( $_FILES['image_path']['name'])." был получен только частично.</font>"; }
if($_FILES['image_path']['error'] === 4)
{ $msg="<b>Ошибка:</b> <font color=#FF0000>Файл не был загружен. Вероятнее всего Вы не выбрали файл.</font>"; }
}
}
}
}
}
.....
<? echo $error_1; ?>
<? echo $error_2; ?>
<? echo $error_3; ?>
<? echo $error_4; ?>
<? echo $error_5; ?>
<? echo $error_6; ?>
<? echo $msg; ?>
.....
<form action="<? $PHP_SELF; ?>" method="post" enctype=multipart/form-data>
<input type="hidden" name="post" value="Y">
<input type="hidden" name="MAX_FILE_SIZE" value="50000">
....
<input type="file" name="image_path" value="<? echo $image_path; ?>" size=25>
....
<input type="submit" value="Добавить">
</form>
Всем спасибо за помощь и ссылки на мануал.
Пойду выяснять про отличие copy и move_uploaded_file в аспекте безопасности.