Only because I’ve used it before, I think I’ll try ddrescue first, since its -D option appears to disable output caching (and I guess for good measure -d to disable caching from the input file too).
Someone please correct me if ddrescue -D is not equivalent to dd oflag=direct
Just wanted to provide the resolution in case someone else has this problem: it was the PC. I bought a new PC, and the USB stick created by Etcher worked just fine, as did the one created by ddrescue. Not the solution I was hoping for, but at this point I’ll take it.