Ender 3 with BLTouch prints slanted lines
This turned out to be a problem with the tightness of the rollers at the left and right sides of the X-axis gantry (that roll up and down the Z rails).
Z-axis motion is driven by a single stepper motor on the left side, so the rollers have to be just the right amount of tight to keep the right side in sync. If the right side is tighter or looser than the left then it lags behind, which gives the gantry a slight slant which changes as it goes up and down.
If the gantry is changing pitch throughout the print, no amount of bed leveling will help. Even auto-leveling is worthless, because the readings the BLTouch takes become immediately out of sync with the gantry as soon as it moves again.
The solution is to adjust the eccentric nuts in the rollers on the left and right. The best description I could find is that they need to be just tight enough that there's some resistance if you roll the top wheel with your finger, but loose enough that you can roll it without forcing the gantry up and down.
I ended up putting a magnetic digital level on top of the gantry rail so I could see exactly how much its incline changed. Send gcode to slide it up and down, then adjust the eccentric nuts a little bit, then repeat. Once I got it so the level didn't change, I re-leveled the bed and printed a beautiful first layer.
That was almost a year ago and it's been working ever since. I've had to re-adjust the eccentric nuts periodically when things start to get off, probably due to thermal expansion when the weather changes.