I think the problem has to do with this ’ being a curly apostrophe. The trace shows that the input is read as [ "x" x / "phil?s" ? / "desk" desk ], so the curly sign isn’t really coming through; whereas a straight apostrophe ' is read as [ "x" x / "phil's" phil's / "desk" desk ] (and the straight apostrophe should actually be understood even without being stripped by Punctuation Removal).
Since the input with the curly apostrophe is read as “phil?s”, this gives us a workaround:
After reading a command:
remove question marks;
But I’m not sure what the best and most robust solution is; I don’t know whether other interpreters might behave differently.