If your point is that a 400 (Bad Request) would be more appropriate, I think you have a point. 501 should really be reserved for if the service doesn't support it at all. This can be determined by ProtocolFeaturesSupported.FilterQuery in the service root but a 501 does seem inappropriate when the client made a mistake by trying to filter a single instance. I would think a 400 would be more appropriate for single instances. The spec currently says everything is a 501 though, so we will see what we can do to bring it in alignment with HTTP expected semantics.
I got same question as Mani's in my implementation. Could client perform $filter query on those instance resources with array-value properties? for example: use $filter=Voltages/SensorNumber eq 192 to retrieve all matched voltage sensors