It's not DISTINCT that causes the issue, it is the need for extra columns in the 'other' table.
SELECT DISTINCT a.col1, a.col2 -- note: a.col2, not b.col2
FROM a
INNER JOIN b ON a.col1 = b.col1 -- not joining on col2
WHERE b.col2 in ('value1', 'value2') -- b.col2; no clue of a.col2
ORDER BY a.col1
INDEX (col1) -- a
INDEX (col1, col2) -- b
MySQL is not very good at optimizing IN and OR. So, it probably did not see much opportunity in using b's INDEX (col1,col2). Instead it decided to do a table scan on one table, then reach into the other table (nested loop join). At that point, picking a vs b was possibly a toss up. Actually, it may have deliberately done a, then b -- note that it needs to use INDEX(col1,col2) to get into b, at which point it might have check "b.col2 IN(...)". I can't tell from the EXPLAIN.