The classic "running toilet" problem is when the flap doesn't stops the tank draining, or the float doesn't shut the valve and water overflows into the bowl (this is when jiggling the handle helps). My case was different.
After some practice flushes, I realized the tank was filling higher than expected. It wasn't overflowing into the pipe, but it was close, and the extra pressure caused the flap at the bottom to open very slightly and create a slow leak. This leak was totally quiet and stopped on its own after about ten minutes, so that couldn't be the whole problem.
I heard the louder drain-and-refill cycle happen a few times, and eventually I got to see it start. The float is supported and guided by a vertical rod; it's supposed to glide up and down the rod with little friction so it moves with the water level. The problem was friction between the float and rod, probably due to mineral buildup. As the water rose, buoyancy was countered by friction, and the float didn't go as high as it should, delaying the closing of the valve. That let the water rise a bit higher than it should, and the minor symptom of the flap not fully sealing the tank. But then the tank drained a little bit, and the float was being held up by barely sufficient friction. A jolt, loud noise, or temperature change could then let the float drop a half inch or so, opening the valve and starting the cycle again.
The most correct solution would be to thoroughly clean or replace the float and rod. I decided to simply adjust it so buoyancy would overcome friction. There is a little clip that holds the float in place, and by opening it I could move the float up and down relative to the shutoff position. I moved it down a quarter inch, so now it shuts the valve when the water is a quarter inch lower than before. In an otherwise working toilet, this adjustment will cost you some flushing power because the tank doesn't fill as completely, but in my case I think it just canceled out the old over-filling problem.
That was about two weeks ago, and there have been no further problems.