There is a difference, in fact the preferred syntax is actually `when: foo is changed`
There is no guarantee that the attribute will exist on a returned object. In addition to handling a non existent key/attribute, the changed test also has some more complex logic, where it will look into a sub-key called `results` too.
Historically we did not have jinja tests, which is what the `foo is changed` represents, so we registered them as filters (`foo|changed`). We are deprecating using tests as filters, which is why the `is` syntax is preferred there.