Регистрация пользователей. Меняем порядок полей через result_modifier.php

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true);
// Function for order function sortArray($arSource, $arOrder, $arUserFields = Array()) {    $arFirst      = Array();    $arUserProps   = Array();    if(count($arUserFields)) {       foreach($arUserFields as $keyFiels=>$arField) {          $arUserProps[] = $keyFiels;       }    }    $arUsedFields = array_merge($arSource, $arUserProps);
   foreach($arOrder as $sField) {       if(in_array($sField, $arUsedFields)) {          $arFirst[] = $sField;
         foreach($arUsedFields as $keySource=>$sSource) {             if($sSource == $sField) {                unset($arUsedFields[$keySource]);             }          }       }    }
   $arResult = array_merge($arFirst, $arUsedFields);
   return $arResult; } // Set array of order fields $arOrder = Array(    "NAME",    "PERSONAL_PHONE",    "EMAIL",    "UF_PERSON",    "PASSWORD",    "CONFIRM_PASSWORD" );
// Order of array $arResult["SHOW_FIELDS"] = sortArray($arResult["SHOW_FIELDS"], $arOrder, $arResult["USER_PROPERTIES"]["DATA"]);

template.php, на случай, если используются пользовательские поля:
...
<?if(GetMessage("REGISTER_FIELD_".$FIELD)):?>
    <tr>
       <td><?=GetMessage("REGISTER_FIELD_".$FIELD)?>:<?if ($arResult["REQUIRED_FIELDS_FLAGS"][$FIELD] == "Y"):?><span class="starrequired">*</span><?endif?></td>
     </tr>
 <?endif;?> 
 ...
 default:
    if(strstr($FIELD, "UF_")) {
       $arUserField = $arResult["USER_PROPERTIES"]["DATA"][$FIELD];
       ?>
          <tr>
             <td>
                <?=$arUserField["EDIT_FORM_LABEL"]?>:<?if ($arUserField["MANDATORY"]=="Y"):?><span class="starrequired">*</span><?endif;?>
             </td>
          </tr>
          <tr>
             <td>
                <?$APPLICATION->IncludeComponent(
                   "bitrix:system.field.edit",
                   $arUserField["USER_TYPE"]["USER_TYPE_ID"],
                   array("bVarsFromForm"=>$arResult["bVarsFromForm"],"arUserField"=>$arUserField,"form_name"=>"regform"), null, array("HIDE_ICONS"=>"Y"));?>
             </td>
          </tr>
       <?
       } else {
          if ($FIELD == "PERSONAL_BIRTHDAY")
 ...  
<?if($arResult["USER_PROPERTIES"]["SHOW"] == "Y" && false):?>

Здесь я обозначил ключевые моменты, думаю, будет понятно что на что менять. 

Как формируется порядок полей штатно - я не нашел. Подозреваю, что он жестко прописан в ядре или компоненте. 
В идеале, конечно, добавить в .parameters.php и как-то там указывать порядок, но пока не придумал, как лучше это сделать.