Have you tried using alternate layers? Otherwise, for variable fonts, consider using the rvrn feature. Add the feature in Font Info > Features. Let’s say you have a weight axis (axis tag: wght) from 200 to 900 and you want the shapes to switch at 750. The code would look like this:
condition 750 < wght;
sub a by a.alt;
sub b by b.alt;
And so on. This means that you need to have an .alt (or whatever suffix you want to use) glyph for every glyph you want t substitute.
Does this make sense for your design? This technique would also mean your switching glyphs don’t need to be compatible with each other.