Следует отметить вот такой порядок параметров
CIBlockElement::SetPropertyValues( $i_ElementID, $i_IblockID, array('PROPERTY_CODE' => 'PROPERTY_VALUE') );
В этом случае очень важный момент, при обновлении нужно задать все свойства элемента, иначе те которые не заданы будут сброшены.
Это напоминает логику работы CIBlockElement::Update(), если не все свойства указать в PROPERTY_VALUES.
Обновлять не все свойства можно через CIBlockElement::SetPropertyValuesEx()
Так тоже можно, только формат задачи параметров будет
CIBlockElement::SetPropertyValues(
$i_ElementID,
$i_IblockID, ‘PROPERTY_VALUE’
‘PROPERTY_CODE’
);
Запись скорее об особенности метода.