What was wrong?
The filter method on the Eth module doesn't make a JSON-RPC request if a filter_id is passed in. The Method class doesn't make it easy to skip the method call if needed. The current solution is to raise and then catch an error right before the request is made, but this isn't an ideal long-term solution.
How can it be fixed?
Piper made a suggestion for a solution here, which is probably the best place to start.