No, it's not guaranteed. Frames can be skipped in a variety of situations. For example, the CPU of the device might not be able to keep the requested frame rate.
Video game engines typically have two different loops running at the same time:
Fixed timestep loop. This runs at fixed timestep (i.e. 0.02 sec, which is 50 Hz). No frames are ever skipped in this loop, even under high CPU loads. In that case the game might slow down. The logic of the game should run here (physics, movements, decisions, etc), so the result will always be the same no matter the cpu load, vsync or refresh rate.
Visual loop. This runs once per visual frame. Time step is variable here depending on the refesh rate. Frames might be skipped under heavy CPU load. All visual stuff, art stuff, and any "expendable" stuff should run here. The code here would take the current state (which is calculated in the fixed timestep loop) and update the visual entities accordingly. The point is that even if this loop is not running, the game would still run properly but without visual output (as the logic is executed in the fixed timestep loop).
As example, you can take a look at the execution flow of the Unity 3D engine here:
(scroll down for the flow chart picture)
The fixed timestep loop is named "Physics" in the chart. The Visual loop is the rest of the loop below Physics. Note that the "Game Logic" label is not correct in that chart. I think this is a "legacy" definition, as in the beginning of Unity the game logic was typically developed in the visual loop.