Well with all of everyone's input, I think I have it solved.
Wrote a combination of a TP program that calls a KAREL program so I can now easily update whatever REFERENCE POSITION I want to.
Giving credit to the other's and code references in this post - a lot of this was copied from existing programs they wrote and then I modified to fit my circumstances.
Hopefully this will save someone else a bit of time in the future.
It seems to work quite well for me, but as always, I'm sure there could be some improvements in the code, or a scenario where this won't work.
KAREL Program:
----------------------------------------------------------------------------------------------
--- Section 0: Description
--- This should be called from a TP program as:
--- : CALL K_UpdateRefPos( 1, 2, 3, 4) ;
--- 1 is the REFPOS number to update
--- 2 is the POSITION register WITH the cartesian point TO convert
--- 3 is the number OF the UFRAME
--- 4 is the number OF the UTOOL
----------------------------------------------------------------------------------------------
--- Section 1: Program and Environment Declaration
----------------------------------------------------------------------------------------------
PROGRAM K_UpdateRefPos
%NOLOCKGROUP
%COMMENT = 'K_UpdateRefPositions'
%ALPHABETIZE
----------------------------------------------------------------------------------------------
--- Section 2: Variable Declaration
----------------------------------------------------------------------------------------------
CONST
cc_success = 0 -- Success status
cc_xyzwpr = 2 -- Position Register has an XYZWPR
cc_jntpos = 9 -- Position Regsiter has a JOINTPOS
VAR
REFPOS_NUM :INTEGER
PR_NUM :INTEGER
UF_NUM :INTEGER
UT_NUM :INTEGER
result :INTEGER
data_type :INTEGER
str_value :STRING[10]
real_value :REAL
xyz :POSITION
jpos :JOINTPOS
dummyArray :ARRAY[9] OF REAL
indx :INTEGER
----------------------------------------------------------------------------------------------
--- Section 3: Routine Declaration
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
--- Section 4: Main Program
----------------------------------------------------------------------------------------------
BEGIN -- K_UpdateRefPos
-- Retrieve TP Arguments
GET_TPE_PRM(1, data_type, REFPOS_NUM, real_value, str_value, result)
GET_TPE_PRM(2, data_type, PR_NUM, real_value, str_value, result)
GET_TPE_PRM(3, data_type, UF_NUM, real_value, str_value, result)
GET_TPE_PRM(4, data_type, UT_NUM, real_value, str_value, result)
-- intialize array
FOR indx = 1 TO 9 DO
dummyArray[indx] = 0.0
ENDFOR
-- make sure it is not at singularity point
dummyArray[5] = 90.0
-- Get Position Register in cartesian format
xyz=GET_POS_REG(PR_NUM,result)
-- verify register retrieved ok
IF (result = cc_success) THEN
-- Set user frame of reference
-- $UFRAME=$MOR_GRP[1].$NILPOS --use this for world
$UFRAME = $MNUFRAME[(UF_NUM),1]
-- Set tool reference
$UTOOL=$MNUTOOL[(UT_NUM),1]
-- convert 'xyz' to joint position
jpos=xyz
-- convert jpos to a REAL array
CNV_JPOS_REL(jpos,dummyArray,result)
-- convert jpos to radians and store in REF position
$REFPOS1[REFPOS_NUM].$PERCHPOS[1]=(dummyArray[1]*0.01745)
$REFPOS1[REFPOS_NUM].$PERCHPOS[2]=(dummyArray[2]*0.01745)
$REFPOS1[REFPOS_NUM].$PERCHPOS[3]=(dummyArray[3]*0.01745)
$REFPOS1[REFPOS_NUM].$PERCHPOS[4]=(dummyArray[4]*0.01745)
$REFPOS1[REFPOS_NUM].$PERCHPOS[5]=(dummyArray[5]*0.01745)
$REFPOS1[REFPOS_NUM].$PERCHPOS[6]=(dummyArray[6]*0.01745)
ELSE
WRITE('Error getting PR',CR)
ENDIF
END K_UpdateRefPos