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