I don't like that implementation of 'rotate, since it causes subexpressions of car.places to be evaluated twice. (I don't know if 'shift has similar quirks without looking at its code.)
This is something I cared about when working on Penknife that I now realize I don't actually use. (In fact, I don't use 'rotate or 'swap at all; it only comes up in 'zap.) My current way of thinking is that I wouldn't bother to fix it. I'd put a note in the documentation instead, or else detect unsupported usage and raise an error. And then I guess I'd make sure to apologize for that caveat every time I talked about the utility. :-p
If you want to fix it, I've found it's pretty elegant to have a (place ...) form that gives you a getter and a setter.