Hi,
It has to do with how Python interprets commands and how numpy overwrite common operators.
If you try
m.addCostr((x+y) * a[0] <= 2)
then it will go through. In the first case, numpy product is accepting the linear expression (x+y) as a valid operand and returning a bool, whereas when is multiplied by a variable a[0] * x, numpy does not accept it as a valid operation and so Python tries the reverse x * a[0], where it just works. The difference between 7.0 and 7.5 is that in 7.5 linear expressions, quadratic expressions and columns are iterable objects, which (I guess) allows numpy to carry on with many operations (even thought at the element level they don't make any sense).
So, I guess there is no easy way to get out of this problem (besides changing order of the operations).
Best,
Daniel