Наверно версия движка, но я в это слабо верю.
addProductsProperty - существует из покон веков.
getPropObjects - не так давно добавлен, насколько я помню.
Если
{$list = $this_controller->api->addProductsProperty($list)}
отсутствует, то в $product->getPropObjects() вообще ничего не должно быть.
Скажите, а в самом товаре что даёт в итоге {var_dump($product->getPropObjects())} и {var_dump($product.properties)} ?
Что касается $product->fillProperty() решение правильное, однако, это будет каждый запрос на каждый товар. А хотелось бы один за счёт addProductsProperty.
Возможно я предположу, что у Вас возвращаются характеристики и группы характеристик в одном массиве, поэтому посмотрите, что будет в случает если сделать вот так.
{$list = $this_controller->api->addProductsProperty($list)} {* В нужном месте. *}
{foreach $product->getPropObjects() as $data}
{foreach $data.properties as $property}
{var_dump($property.title)}
{/foreach}
{/foreach}