Whilst the audit triggers suggest we did a simple insert then delete, in reality, there's a lot more complexity going on behind the scenes here. If you trace the refresh you'll see something like:
DELETE FROM "MCDONAC"."MV_TEST" "SNA$"
WHERE
ROWID IN (SELECT RID FROM ( SELECT "SNA$".ROWID RID, ROW_NUMBER() OVER
(PARTITION BY "C_ROWID" ORDER BY RID$ NULLS LAST) R, COUNT(*) OVER
(PARTITION BY "C_ROWID" ) T_CNT, COUNT(RID$) OVER (PARTITION BY "C_ROWID" )
IN_MVLOG_CNT FROM "MCDONAC"."MV_TEST" "SNA$", (SELECT DISTINCT RID$ FROM
(SELECT CHARTOROWID("MAS$"."M_ROW$$") RID$ FROM
"MCDONAC"."MLOG$_TEST_PARENT" "MAS$" WHERE "MAS$".SNAPTIME$$ > :B_ST0 AND
NOT ("MAS$".DMLTYPE$$ = 'U' AND
(sys.dbms_snapshot_utl.vector_compare(:B_CV0,
"MAS$".change_vector$$) = 0))) ) AS OF SNAPSHOT(:B_SCN)
MAS$ WHERE "SNA$"."C_ROWID" IN (SELECT "C_ROWID" FROM "MCDONAC"."MV_TEST"
"SNA$" WHERE "P_ROWID" IN (SELECT * FROM (SELECT
CHARTOROWID("MAS$"."M_ROW$$") RID$ FROM "MCDONAC"."MLOG$_TEST_PARENT"
"MAS$" WHERE "MAS$".SNAPTIME$$ > :B_ST0 AND NOT ("MAS$".DMLTYPE$$ =
'U' AND (sys.dbms_snapshot_utl.vector_compare(:B_CV0,
"MAS$".change_vector$$) = 0))) AS OF
SNAPSHOT(:B_SCN) MAS$)) AND "SNA$"."P_ROWID" = MAS$.RID$(+) ) "SNA2$" WHERE
T_CNT > 1 AND ((IN_MVLOG_CNT = T_CNT AND R > 1) OR (IN_MVLOG_CNT <
T_CNT AND R <= IN_MVLOG_CNT)))
UPDATE "MCDONAC"."MV_TEST" SNA$ SET "P_ROWID"=NULL,"C1"=NULL+123
WHERE
"P_ROWID" IN (SELECT /*+ NO_MERGE HASH_SJ */ * FROM (SELECT
CHARTOROWID("MAS$"."M_ROW$$") RID$ FROM "MCDONAC"."MLOG$_TEST_PARENT"
"MAS$" WHERE "MAS$".SNAPTIME$$ > :B_ST0 AND NOT ("MAS$".DMLTYPE$$ =
'U' AND (sys.dbms_snapshot_utl.vector_compare(:B_CV0,
"MAS$".change_vector$$) = 0))) AS OF
SNAPSHOT(:B_SCN) MAS$)
INSERT /*+ NOAPPEND */ INTO "MCDONAC"."MV_TEST" SELECT /*+ NO_MERGE("JV$")
*/ "JV$"."RID$","MAS$1".ROWID,"MAS$1"."CID","MAS$1"."C3","MAS$1"."C4",
"MAS$1"."PID","JV$"."C1"+123 FROM ( SELECT "MAS$"."ROWID" "RID$" ,
"MAS$".* FROM "MCDONAC"."TEST_PARENT" "MAS$" WHERE ROWID IN (SELECT /*+
HASH_SJ */ CHARTOROWID("MAS$"."M_ROW$$") RID$ FROM
"MCDONAC"."MLOG$_TEST_PARENT" "MAS$" WHERE "MAS$".SNAPTIME$$ > :B_ST0 AND
NOT ("MAS$".DMLTYPE$$ = 'U' AND
(sys.dbms_snapshot_utl.vector_compare(:B_CV0,
"MAS$".change_vector$$) = 0)))) AS OF SNAPSHOT(:B_SCN)
"JV$", "TEST_CHILD" AS OF SNAPSHOT(:B_SCN) "MAS$1" WHERE "MAS$1"."PID"=
"JV$"."PID"
DELETE FROM "MCDONAC"."MV_TEST" "SNA$"
WHERE
ROWID IN (SELECT ROWID FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY
"C_ROWID" ORDER BY "P_ROWID" NULLS FIRST) R, COUNT(*) OVER (PARTITION BY
"C_ROWID" ) T_CNT, COUNT("P_ROWID") OVER (PARTITION BY "C_ROWID" )
NONNULL_CNT FROM "MCDONAC"."MV_TEST" "SNA2$" WHERE "C_ROWID" IN (SELECT
"MAS$1".ROWID FROM ( SELECT "MAS$"."ROWID" "RID$" , "MAS$".* FROM
"MCDONAC"."TEST_PARENT" "MAS$" WHERE ROWID IN (SELECT /*+ HASH_SJ */
CHARTOROWID("MAS$"."M_ROW$$") RID$ FROM "MCDONAC"."MLOG$_TEST_PARENT"
"MAS$" WHERE "MAS$".SNAPTIME$$ > :B_ST0 AND NOT ("MAS$".DMLTYPE$$ =
'U' AND (sys.dbms_snapshot_utl.vector_compare(:B_CV0,
"MAS$".change_vector$$) = 0)))) AS OF
SNAPSHOT(:B_SCN) "JV$", "TEST_CHILD" AS OF SNAPSHOT(:B_SCN) "MAS$1" WHERE
"MAS$1"."PID"="JV$"."PID") ) "SNA2$" WHERE T_CNT >= 1 AND ((NONNULL_CNT =
0 AND R >= 1) OR (NONNULL_CNT > 0 AND R <= T_CNT - NONNULL_CNT)))
but ultimately I would suspect this is due to the fact that we have to handle all potential permutations here. This test case is a simple update, but more complex scenarios could involve deleting a row, re-inserting it, then updating it, then deleting etc etc etc...all of which we have to get "just right".