So these glyphs are in @DisconnectedLowercase: o x
And these are not: a n
In the sequence o x x o the renderer will first encounter the pair o x and, applying your InitForms3 lookup, will make it (say) o x.alt.
Then the renderer moves along not to x x but to x.alt x. Since x.alt is not in @DisconnectedLowercase, InitForms3 will not make a substitution for the second x. But all the other lookups are also consulted for x.alt x. So a lot depends on what is in @AllLetters, @isolDef and @initDef. For example, if x.alt is not in @AllLetters and x is in @initDef, a substitution will be made for the second x by your InitForms lookup.
More abstractly, remember that given a sequence
1 2 3 4
The renderer will (a) deal with 1 2, sorting through the lookups till it finds one that applies, then will (b) deal with 2 3 as modified by (a), then deal with 3 4 as modified by (a) and (b), and so on.
I can’t be sure how these considerations apply without seeing all your classes, but it seems to me that everything depends on what’s in those classes.