ETA: Huh. It's been more than three months since I posed this question. Is it really possible that no one knows the answer? I thought for sure someone would know. Oh well.
You have a small bar magnet that is able to pivot about its middle (like a compass needle). You fix the middle of the bar magnet to a point on the positive half of the y-axis. Initially the bar magnet is pointing in some random direction. Now a proton moves along the x-axis in the positive x-direction with speed v. This moving charge generates a magnetic field, so the bar magnet will twist itself to align with that field, parallel to the z-axis.
The above description is in the rest-frame of the bar magnet. But what about in the rest-frame of the proton? Now the proton is at rest, so it generates no magnetic field. Nevertheless, the bar magnet (now moving in the negative x-direction with speed v) must still pivot around to point in the z-direction -- if this happens in one reference frame, it must happen in every frame. But what is the explanation for the twisting of the bar magnet in the proton's rest-frame?
I have come up with what may be a partial solution, but 1) I am not sure if it is correct, and 2) it only seems to work when the bar magnet is originally oriented along the y-axis. If the bar magnet is originally pointing parallel to the x-axis, my explanation fails.
To start, let's replace the bar magnet with a circular loop of current-carrying wire, which has stationary positive ions and negative conduction electrons moving with drift speed v_d. The ions and electrons have the same charge density, so the loop is electrically neutral. This current loop is more or less equivalent to the bar magnet in terms of its own magnetic field.
Say that the bar magnet is originally aligned along the y-axis. So the current loop we are replacing it with is originally perpendicular to the y-axis. In the rest-frame of the proton, the current loop moves in the negative x-direction at speed v, and is therefore Lorentz-contracted into an ellipse, with its major axis in the z-direction and its minor axis in the x-direction.
Due to this contraction, the positive ions in the wire (all moving at speed v) will have a higher concentration at the ends of the loop's major axis. At one of those two spots, the conduction electrons will have speed v + v_d, so they will experience more Lorentz-contraction than the ions and have an even higher concentration; thus the net charge there will be negative, and that part of the loop will be electrically attracted towards the stationary proton. Conversely, at the other end of the loop's major axis, the conduction electrons will have speed v - v_d, so they will experience less Lorentz-contraction and have a lower concentration than the ions, resulting in a net positive charge that will be electrically repelled away from the proton. Result: these two electrical forces torque the current loop until it is perpendicular to the z-direction -- which is to say, the original bar magnet will align itself with the z-direction, just like in the bar magnet's rest-frame.
However, this explanation won't work if the bar magnet is originally aligned parallel to the x-axis. In that case, the current loop I'm replacing it with is originally perpendicular to the x-axis. In the rest-frame of the proton, the circular current loop (moving along the x-axis) now remains a circle -- the Lorentz contraction doesn't alter its shape. And all conduction electrons are traveling at the same speed in this frame, so I don't see how I would get parts of the loop to become positively and negatively charged, as I did previously.
And anyway, in order to twist the ring so as to be perpendicular to the z-direction, there must be a pair of forces pulling the ring in directions parallel to the x-axis. These forces can't be electrical attractions or repulsions, as they don't point towards or away from the stationary proton. And they can't be magnetic forces because the only magnetic field is the one from the current loop itself, and that can't cause the loop to twist (can it?). So... what am I missing?
Much thanks for any help you can provide.