Я же правильно понимаю, что регистрацию пользователя таким способом вы выполняете в публичной части?
Допустим, что так и есть, тогда второй момент заключается в том, что раз у вас установлено подтверждение регистрации, то авторизации нового пользователя в методе Register() быть не может, и $USER->GetID() возвращает вам не то значение, которое вы ожидаете.
Вам нужно сразу после регистрации искать вашего нового пользователя с помощью метода CUser::GetByLogin(), и по полученному ID выполнить апдейт.
[CODE]
$arResult = $GLOBALS['USER']->Register($_POST["login"], $_POST["name"], $_POST["surname"], $_POST["password"], $_POST["password2"], $_POST["mail"]);
if($arResult['TYPE'] == 'OK') {
// пользователь добавлен
$dbResult = CUser::GetByLogin($_POST['login']);
if($arUser = $dbResult->Fetch()) {
$user_update = new CUser;
$fields = Array(
"SECOND_NAME" => $_POST["middle"],
"PERSONAL_PHOTO" => $arIMAGE,
"PERSONAL_STATE" => $_POST["region"],
"PERSONAL_CITY" => $_POST["city"],
"PERSONAL_WWW" => $_POST["site"],
"PERSONAL_PHONE" => $_POST["work_phone"],
"PERSONAL_MOBILE" => $_POST["mobile_phone"],
"PERSONAL_PAGER" => $_POST["skype"],
"PERSONAL_FAX" => $_POST["ssrr"],
"PERSONAL_PROFESSION" => $_POST["age"]
);
if(!$user_update->Update($arUser['ID'], $fields)) {
echo $user_update->LAST_ERROR;
}
}
}
ShowMessage($arResult); // выводим результат в виде сообщения
[/CODE]
*в коде могут быть ошибки, не проверял