I'm afraid there's no perfect solution. The canonical tag probably is the best bet here - the risk of letting thousands of near-duplicates into the index is much greater than the cost of not landing people on specific colors.
Keep in mind that, once Google removes the color variants, only the "master" product page will appear in search. So, users won't really come into the site with a color intent (except in their heads). Whether that's good or bad for usability isn't clear. On the one hand, it would be nice to rank for every color and have users with a color in mind land on that specific product. On the other hand, some users don't have a color in mind (they know what they like when they see it), and landing on the main product pages shows them all available options. It really depends on your customers, but there are pros and cons, in terms of usability and conversion.
There's no magic Option #3, though - I'm 99% confident saying that. The risks of indexing all color variants post-Panda are relatively high, and I think you'll gain more from consolidating than you'll lose by leaving them all.