I'm back on the mission and, surprisingly, actually made some progress. I adjusted the valves and then took it for a spin with no change. There was a bit of extra slack I had to take out, but nothing excessive. Only 456 hours on this Kubota btw.
I then added regular Seafoam into the gas tank, sprayed Seafoam Top End cleaner into the throttle body (spray tube in, hose back on), and tossed XADO Revitalizant EX120 Conditioner for Motorcycle and Small Engine Equipment ($7 on Amazon. Great stuff: nanoparticle ceramics, one side slick and the other side sticky, that fill in scratches and gouges in cylinder walls, bearings, etc.) into the engine oil, all at the same time. I let the Seafoam Top End cleaner sit for 10 minutes, put everything back together, and took it for another ride. SUCCESS! Still backfiring a little bit and running a bit rough at high RPMS, but WAY better than before, it actually picked up good speed and I had to be careful not to roll it over
I don't know which one actually helped, the Seafoam Top End cleaner or the XADO Revitalizant (Regular Seafoam in gas tank shouldn't have had enough time to mix into a full tank and have an effect that quickly), but just being able to notice progress was very satisfying.
Few more details: I did notice the engine oil was way overfilled. I'm the one that changed the engine oil last and I know I filled it properly. I had to partially loosen the engine drain plug and let it stream out for awhile til it got back to the right level (I did this before adding XADO to the engine oil). Is it possible that the rings are so worn that gas is leaking through into the engine oil over time? If so, then the XADO in engine oil was the winner here, restoring compression and sealing ability to the rings. If not, then the Seaform top end cleaner did the job by removing carbonization from the valves and valve seats, restoring a tight seal there.
Also, while I was adjusting the valves I took a look at the timing chain. The service manual states that the gold-looking timing chain plate (bottom plate in picture) is supposed to match up with a dimple on the sprocket (right side in picture). This is clearly not the case, but with the spark plug out I was able to confirm that the top dead center on the piston matches both marks on the camshaft sprocket and line up with the head. This must have been assembled not using the timing chain plate as reference for the timing, but it does seem that the timing is good. Am I correct in assuming this?
I let it sit overnight (with Seafoam in the cylinder through spark plug hole as Rollo suggested) so I could adjust the valves again this morning. Got the valves adjusted (only exhaust valve was a tiny bit loose), everything put back together and took it for a spin. To my disappointment, it was back to its old ways of backfiring and not being able to pick up any speed, long after it stopped smoking out the exhaust and the Seafoam burned off. I kept at it, riding it around for awhile, and after a bit it actually improved to what I was seeing the day before. This is a tricky one, but I'm leaning towards the piston rings being shot due to the engine oil rising. Would love to get some opinions!