Задача решается несколькими разными способами, например при регистрации пользователя сразу создавать профиль покупателя и заполнять его значениями из основного профиля. Про это почитать можно
здесь
Также можно заполнять значения в result_modifier.php, я остановился в результате на таком подходе, правда не могу сказать, что он является оптимальным.
В result_modifier.php sale.order.ajax получаем данные текущего пользователя, затем передаем их в объект, используемый в js. В моем случае это было удобно было сделать в цикле, так как свойств много. Предварительно я установил символьные коды свойств заказа такими же, как у соответствующих свойств из профиля пользователя ( например в профиле для поля "юридический адрес" код - UF_LEGAL_ADDRESS, соответственно в свойствах заказа символьный код этого свойства сделал таким же)
$currentUser = CUser::GetByID($USER->GetParam('USER_ID'));
$arUser = $currentUser->Fetch();
foreach ($arResult["JS_DATA"]["ORDER_PROP"]['properties'] as $propKey => $propItem) {
if (array_key_exists($propItem["CODE"], $arUser)
&& !empty($arUser[$propItem["CODE"]])
&& empty($propItem["VALUE"][0]) ) {
$arResult["JS_DATA"]["ORDER_PROP"]['properties'][$propKey]["VALUE"][0] = $arUser[$propItem["CODE"]];
}
}