You're operating on the wrong assumptions. Per definition of ANSI SQL, order of a result set is only defined and created by an explicit ORDER BY clause on the outer SELECT statement or expression of a window function.
Result sets may often have the same order even without ORDER BY statement due to internal implementation details. But there is NO guarantee for this. Thus you've been only lucky.
You're ordering by a CASE expression which returns 99 as constant value. This order is arbitrary per definition as it does not cover a candidate key. Thus add a "failback" order criteria and you're safe:
SELECT PROD_ID ,
UOM_ID ,
FIRST_VALUE(BAR_CURR_CODE) OVER ( PARTITION BY prod_id
ORDER BY CASE WHEN UOM_ID IN ( 'IT' ) THEN 1
WHEN UOM_ID IN ( 'MP' ) THEN 2
WHEN UOM_ID IN ( 'BP' ) THEN 3
WHEN UOM_ID IN ( 'CS' ) THEN 4
WHEN UOM_ID IN ( 'SW' ) THEN 5
ELSE 99
END ASC ,
UOM_ID ASC ) AS BAR_CURR_CODE ,
BAR_CURR_CODE AS org_BAR_CURR_CODE
FROM BSR_STG_Q.Cdl_Prod_Uom_Fct
WHERE curr_ind = 'Y'
AND NOT BAR_CURR_CODE IS NULL
AND prod_Id = '00267461';