Fist, that diagram is non-normative and misleading in many respects, so don't use that as your source of truth. Use the text.
Second, the text says for failed "checking all candidate pairs", and it's not at all clear what that means and is a topic of discussion in the standards body at this very moment. I recently posted a message to discuss-webrtc asking for input from developers to see what the want the API to do. For example: is "failed" permanent (until and ICE restart)? It's not clear right now.
If "failed" is not permanent, then going from "failed" to "disconnected" is possible if:
1. You were once connected.
2. You became disconnected but continued checking (which is not the checking state)
3. All the candidate pairs failed, so you went to "failed"
4. You received a check from the remote side, so you start checking back. Now you go to the "disconnected" state.