Hi,
SubFsm, introduced recently is a perfect example of that kind of pattern. create a subfsm, and call from various states, you will avoid duplication of logic.
When you face this situation, and don't want to use sub fsm, it means that you need to wrap that logic into its own fsm, with an interface and all. So instead of having that logic you will reuse in various fsm inside each of these fsm, call another gameObject responsible to do just that ( or another fsm on that gamObject).
In that case where you need to do the same "if" in the same fsm on different states, then it is indeed necessary to have redundant states, doing the very same check but on different branches of the fsm state flow. that's fine, and I do that all the time on complex fsm, I usually avoid add "1", "2" to the state and prefer adding plain spaces, so your state name is "Is it true", then if you duplicate that, you will have "Is it true " ( notice the space at the end of the sentence", this way my fsm stays clean.
in your case, I think it's the last case, where you will need to check for a boolean value in various places, nothing wrong with that ( but one could argue that maybe you should have more fsm and split your logic into smaller chunk that you call or instantiate only when needed, but that's really something to study on a per case bases)
Does that help?
bye,
Jean