Two problems here.
(a) method resolution picks up the wrong method (Array.operator()(Int) instead of Array.operator()(Point)), and thus tries to generate a coercion
(b) the code for generating dynamic checks fails to replace the this from the Array class method argument type with the receiver, thus confusing the typechecker.
Yoav, can you please take a look? We may have to change our dynamic check generation strategy to detect such cases and default to something like your closure generation code instead.