After scrambling over the network and trying out various “solutions”, it’s clear that this is a real mistake in iOS. It is present with iOS 8 ... and is still present in iOS 10. It was originally listed in iOS 8, but the solution was never tested, and Apple automatically closed the radar due to inactivity.
I filed a new radar as this directly contradicts the documentation for dismissViewController
If you consecutively represent multiple view controllers, stack the presented view controllers by calling this method (meaning - [UIViewController rejectViewControllerAnimated: completion]) on the view controller below in the stack rejects its immediate child view controller and all view controllers above this child in the stack. When this happens, only the topmost view is rejected in the animated mode; any intermediate controllers are simply removed from the stack.
Clear visualization of the problem, both expected and actual results. Sign Boris Survorov for a test project and visualization.

source share