why would you use labels over metadata? In the MIG lab, i could have very well used function:learning and madeby:template as metadata.
Labels are mostly to "categorize/organize" your resources. I have seen these mostly used to help audit Resource usage, categorize traffic. This is also helpful when you are trying to analyze spend for resources that are labelled.
Metadata for the most part can be thought of configuration that can be used by apps running within the instance. I think of these as Environment variables. You can set instance metadata and then your applications deployed can query it (using the metadata server) and use it in the programs.
Hope this will get you started in the right direction. Best of luck