this is a very detailed question and not one that can very easily be answered simply, but I'll try.
QoS = Quality of Service. This is a general term of classifying / prioritizing traffic in the network (for example, prioritize VoIP over FTP traffic)
ToS = Type of Service. This is a byte in the IPv4 header which is used for Precedence, or in other words categorizing traffic classes (eg. precedence 0 = routine traffic, 5 = critical). In the more modern form, the ToS is used for DSCP. This is one of the tools available for QoS implementation.
CoS = Class of Service. This is a field in the ethernet header, also for categorizing traffic (0-7), however this works at layer 2
Hope that helps a little - it can appear complex, so am trying to keep it simple.
Terms, terms, terms...
Rob did a good job of pointing things out.
QoS is your concept of preferring thigns and/or making policies.
ToS is Layer3, and has multiple interpretations... IP Precedence and DSCP each use the ToS Field in the IP header, just interpret the bits differently.
CoS is 802.1p within the 802.1Q header. As noted, it's 3 bits at Layer2, but another place for us to mark frames/packets in order to implement a QoS policy!
Also keep in mind that your IP header remains intact (barring other policies) end to end. Your Ethernet header is a hop-to-hop (within an L2 network) only before getting changed out.
This may have an effect on what you want to use where!