Color vs. Non-Color data
What Non-Color Data means
Choosing Color Data vs Non-Color Data determines whether or not Blender will color manage your image.
Gamma Correction is a way of compressing color data and is commonly used in many image formats, such as PNG and JPEG. Without getting in to the mathematical nitty-gritty, Gamma Correction raises the intensity of a pixel to a certain power (or gamma value) to encode it, then raises it to the reciprocal power to decode it. Why would we want to do this? Here's a helpful table from Wikipedia:

Source
The bottom row, Linear intensity represents the non-gamma corrected values. You will observe that there is a large jump in intensity between 0.0 and 0.1 stops. In the top row, Linear encoding (meaning it is gamma-corrected), you will see that the difference in intensity between the stops is much more even.
What this means is that a basic linear scale does not equally distribute intensity as our eyes see it across the range [0, 1]. Referencing back to our image, between stops 0.0 and 0.1 on the bottom row, that whole range of color has to be squeezed into one tenth of the available range. On the other end of the spectrum, the range between 0.8 and 1.0 on the bottom only needs 0.9 to 1.0 on the top. This way, the colors that we can see are given more &quot;space&quot;, and the colors we can't really distinguish from one another receive less.
Most common image formats (and video displays) use sRGB (standard Red Green Blue) as their chosen encoding. This actually has a non-linear gamma (don't worry about it) that can be approximated by 2.2.
When you select Color Data, Blender will gamma correct your image (based on the image encoding). When you select Non-Color Data, Blender will not alter the RGB values of the image, leaving them in a linear scale.
When you should use it
Color Data should be used for image textures being used to color a model, like Diffuse and Albedo textures. This way, they will be color managed to display their intended color values.
Non-Color Data should be used for image textures being used to store other data. For example, Normal Maps store the normal vector data of a given point on a mesh. Vectors (in this case) are linear and have no need to be gamma corrected. The same goes for other maps like Bump maps or Specular maps. These images had values stored to them on a linear scale, so they should be read on a linear scale.
Hope that all made sense. I'm happy to clarify anything.
Example:

Left - Color Data:
How the image is intended to look.
Center - Non-Color Data:
The image with no gamma correction. Note how there are lots of lighter values and very few dark values, making it look &quot;washed-out.&quot;
Right - Non-Color Data with Gamma node:
This looks very similar to the Color Data image. It isn't exactly identical, though, since the image was encoded with sRGB, while I decoded it with a normal Gamma of 2.2.