В предложенный вами код особо не вчитывался, но предложу эту реализацию:
Код
<?php
$inputData = 'SELECT ....'; //Получаем данные из БД
$outputData = [];
foreach ($inputData as $row){//Собираем данные в нужном формате
    if(!isset($outputData[ $row['Код'] ])){//Собираем основыне данные
        $outputData[ $row['Код'] ]['Свойства'] = $row['Свойства'];
        $outputData[ $row['Код'] ]['Раздел'] = $row['Раздел'];
    }
    $outputData[ $row['Код'] ]['Цены'][] = [//Собираем цены
        'Цена' => $row['Цена'],
        'Тип' => $row['Тип']
    ];
}
unset($inputData);//Удаляем оригинал данных
//По итогу перебираем $outputData и формируем из имеющегося xml
echo '<Товары>';
foreach ($outputData as $key => $row){//Тут уже под свои нужды пишем =)
    echo '<Товар Код="'.$key.'">';
    foreach ($row as $rowInner){
        echo '<Цена Тип="'.$rowInner['Тип'].'">'.$rowInner['Цена'].'</Цена>';
    }
    
    /*
     * ...
     * ...
     */
    
    echo '</Товар>';
}
echo '</Товары>';
  
В общем суть в том, что, проще сначала привести в порядок данные, сформировать их в более приятный для работы вид и уже потом проводить какие-то манипуляции