In order to understand the use of VLAN 0, we must first understand what a VLAN tag is. A VLAN tag (defined by IEEE 802.1Q) is an additional 4 bytes of data that is added to the header of an Ethernet frame. This tag has several fields which include a 12 bit VLAN identifier, and a 3-bit field called a Priority Code Point (PCP) which is defined in IEEE 802.1p which provides prioritization information used by Layer 2 QoS mechanisms. VLAN tags are added to the headers of frames whenever they traverse a trunk (to keep the VLANs separated) and to segregate voice from data traffic when using PC–>IPPhone–>Switch interconnectivity connectivity. More details about this can be found at the 802.1Q Encapsulation Explained lesson.
Now back to VLAN 0. In order to have a VLAN ID of 0, you must have an 802.1Q tag. An untagged frame doesn’t mean that the VLAN ID is 0, it simply means that there is no VLAN ID field in the frame header at all! So untagged does not equal VLAN 0.
Because both the VLAN ID and the PCP field exist in the same tag, Layer 2 QoS mechanisms can only be applied to frames that have such a tag. But what if you want to apply Layer 2 QoS mechanisms to a frame that isn’t on a trunk or on an IP phone connection? You have no PCP info in the frame header, so you cannot apply Layer 2 QoS. This is where the VLAN 0 ID comes in.
The purpose of using a VLAN ID of 0 is when you want to take advantage of the QoS mechanisms provided by the 3-bit PCP field in situations where there is no need for a VLAN ID. This way you can prioritize such frames based on their PCP fields, and the VLAN ID is ignored completely.
The following Cisco documentation explains it quite well.
Out of your four scenarios, only the second one involves VLAN 0. The others simply use regular VLAN IDs or are untagged completely.
I hope this has been helpful!