Как проставить правильные ключи в массиве?
выкинуть $c, т.е. 

$arItem[0]["SUBCATEGORY"][0]["PRODUCTS"][]=[
    "ID"=>$values["ID"],
    ...
];
https://www.php.net/manual/ru/function.array-values.php
upd
или переместить $c++ внутрь if. А то получается, что когда условие не проходит, и в массив продуктов не добавляется элемента, то счётчик все равно плюсуется.
foreach ($n as $keys => $values) {          
            if ($values["PROPERTY_DAYTIME_VALUE"] == 1366 && $values["PROPERTY_TYPE_VALUE"] == 1375) {
          $arItem[0]["SUBCATEGORY"][0]["PRODUCTS"][$c]["ID"] = $values["ID"];
          $arItem[0]["SUBCATEGORY"][0]["PRODUCTS"][$c]["NAME"] = $values["NAME"];
          $arItem[0]["SUBCATEGORY"][0]["PRODUCTS"][$c]["PREVIEW_PICTURE"] = $values["DETAIL_PICTURE"];
          $arItem[0]["SUBCATEGORY"][0]["PRODUCTS"][$c]["PREVIEW_TEXT"] = $values["DETAIL_TEXT"];
          $arItem[0]["SUBCATEGORY"][0]["PRODUCTS"][$c]["PREVIEW_TEXT_TYPE"] = $values["DETAIL_TEXT_TYPE"];
          $arItem[0]["SUBCATEGORY"][0]["PRODUCTS"][$c]["IMAGE_URL"] = $values["IMAGE_URL"];
          $c++;
            }