It sounds to me like it's not getting a ManyManyList instance but something else, which would cause the query you mentioned to not fire. Your work around shouldn't be needed at all if a ManyManyList is received by GridFieldSortableRows. Your code looks good to me, so I'm not sure why it wouldn't be a ManyManyList.
Try adding print get_class($productList);exit; bellow your $productList definition after you call sort on it. What does that produce? Also make sure that you do not have a has_many relationship named the same in that class or any parent classes. Otherwise you may get a HasManyList instead.
You could also try using a custom getter like the following, which should guarantee you get a ManyManyList back:
public function getMyManyManyRelationship() {
return $this->getManyManyComponents('MyManyManyRelationship')->sort('SortColumn');
}