Just because the VC doesn't appear anymore in the simulator or your device, doesn't mean it's animation hasn't fully completed.
I suspect that your "3rd modalViewController" is not being presented after the second network generated view controller is dismissed. The reason it works in the first case is because you have it presenting in the dismissed vc's dismiss completion block.
If the 3rd is presented by a user action, you need to ensure that they can't perform that action before the other vc's dismissal or presentation has completed.
What you might want to do is set the user's action up in a block that you then pass as a parameter to the class that presents the next view controller, and execute the block from the presentation completion block.