The func_movewall is one of the most accurate ways to simulate collision on a rotating entity in Quake. Unfortunately they are nowhere near perfect and can be fiddly to set up.
The idea is to approximate the collision hull of a rotate_object with a number of smaller solid brushes. None of the brushes rotate, but they “orbit” the rotate_object as it rotates, keeping them in place relative to their target. Each of these brushes is a single func_movewall. This means creating a rotating object and accurately simulating collision on it can use a large number of entities.
spawnflag 1=bit#1 is VISIBLE. While func_movewalls were designed for invisible collision, sometimes an entity orbiting in a circular pattern without rotating is just what you want, like a crankshaft in a set of gears. Set this flag to make the func_movewall visible. This flag is also useful for debugging func_movewalls.
spawnflag 2=bit#2 is TOUCH. This means that the func_movewall will cause damage when touched by the player, not just when blocked. Note that you can give just some of a group of func_movewalls this flag, perhaps if your rotate_object has dangerous spikes on one side.
spawnflag 3=bit#4 is NONBLOCKING. This means the func_movewall doesn’t have collision, which really only makes sense if you turn on VISIBLE at the same time.
dmg sets how much damage to inflict when blocked (or touched if TOUCH spawnflag is on). If not set, the func_movewall uses the dmg value on the controlling entity e.g. the func_rotate_train the movewall belongs to.