My explanation was pretty poor, let me rephrase
For example, when calling
Array((x, y), (z, w)).index((z, w))
the following piece of code is executed
bool(Array((x, y)).__eq__((z, w)))
= bool(Array(False, False))
If __bool__ returned whether the Array is nonempty, bool(Array(False, False)) would evaluate to True and the method would wrongly return 0.
You're right that it would be more clear if __bool__ would behave similarly, but since Array computes operations element-wise, it isn't possible.