Solved.

I think it was something to do with my use of braces {} - when I stop searching for a code bracketed in braces (e.g. "{1}") and switch instead to searching for a unique string ("REF01"), the Rge object correctly readjusts its scope and I can use that.

Weird.

Final code:
  SearchCode2 = Split(Split(ReplaceText, "{REF0")(i), "}")(0)
        Set Rge = wDoc.Content
        With Rge.Find
            .Text = "REF0" & SearchCode2
            .Execute
        End With
        
        Rge.Start = Rge.Start - 1
        Rge.End = Rge.Start + 7
        wDoc.Content.Footnotes.Add Range:=Rge, Reference:=SearchCode2, Text:="test"
        Rge.Delete
(Not: I have retained the braces around the unique code, hence needing to adjust the size of Rge at the end. When they are included in the search, the Find function doesn't adjust the scope of Rge.)