Доброго всем дня и времени суток, проблема решена.
После разбора CSaleExport::ExportOrders2Xml из /bitrix/modules/sale/general/export.php
Стало ясно, что эта функция получает пустые значения "PRODUCT_XML_ID" и "CATALOG_XML_ID"
Получает она эти значения посредством вызова CSaleBasket::GetList т.е. из корзины.
Значит эти значения туда не попадают, а за передачу значений как мы знаем ответственна CSaleBasket::Add
Поэтому при добавлении в корзину просто добавляем "PRODUCT_XML_ID" и "CATALOG_XML_ID" в качестве передаваемых значений. И всё оказывается элементарней чем предполагалось (даже обидно, что пришлось все это ковырять вместо того, чтобы просто додуматься).