As Jim stated, they are not a list of numbers,
You can separate the parts of the list into two columns, the first containing the actual number (the one you want to sort) and the other containing the color:
In[1]:= data2[[All, 1]]
Out[1]:= {1, 2, 5, 3, 4, 7, 6}
In[2]:= data2[[All, 2]]
Out[2]:= {RGBColor[1, 0, 0], RGBColor[1, 0, 0], RGBColor[1, 0, 0], RGBColor[
1, 0, 0], RGBColor[1, 0, 0], RGBColor[1, 0, 0], RGBColor[1, 0, 0]}

The function MaximalBy allows you to specify a function the result of which will be the basis for your maximum, you can write:
MaximalBy[data2, First]
Which is equivalent to:
MaximalBy[data2, #[[1]]&]
i.e. it finds the maximum by looking at the first entry of each row (this is where you keep your values). Similarly, you can use SortBy to sort your colored lists.
Regards, Patrik