Hello again! I managed to make things work in the end. As srb1954 suggested, the key was to move the current sense resistor at the input, and then reference everything else to it. It took me a while to understand what was going on, but I think I got there in the end, and I only released the magic smoke once
I also managed to eliminate one of the pass transistors as suggested, though I'm afraid that the circuit that xavier60 posted goes well above my head, so I don't know if, in the end, I landed on the same solution. I have added that schematic to my “dissection list”; I want to spend the time and redraw it to understand it better.
I was able to swap in an LM358 for voltage control, but I could not, for the love of me, make it work as a differential amplifier for current regulation. For some reason, I would always get a ~0.65V offset on the output (suspiciously close to a diode drop, though I wouldn't understand the significance of that, tbh). I don't know if it is because I wired things incorrectly, or because of some other reason, but, once I substituted in a '2272, everything started working as expected. I will have to look more into this, I guess… right now, it doesn't make any sense (I got these from a reputable source, so I don't think there is anything wrong with them).
In any case, these changes leave me with a well-behaved circuit. At 10V/1A draw (full scale with the 5.1V reference), I get a voltage drop of around 50mV, which represents a 0.5% error—I'll take it! There's a 100mV ripple, which is fine for my purposes and I think is caused primarily by the switched input line.
One final question: am I correct in calculating that the sense resistor dissipates 1W per amp of current drawn by the circuit? Right now, I have 10 1/2W 10-ohm resistors wired in parallel, but they are getting mighty toasty :-)
Thanks again for all the help—this has been a great learning experience. Updated schematic below; I welcome further suggestions and ideas for improvements. Cheers!