I've done quite a few, and while I'm certainly no expert, I've learned a few things, and here's what I find works best:
There's a big difference in what works best, depending on whether it's rust or grime. For pure rust, it's hard to beat a good acid. Hydrochloric/muriatic seems to be a popular choice, but I prefer phosphoric (naval jelly) as it converts any remaining bare metal into iron 3 oxide, which is more stable and prevents further corrosion (compared to regular rust, which is primarily iron 2 oxide).
If, however, there is any grime/sludge in there, neither acids nor any off the shelf rust-remover will touch it. I've found the best stuff for this is a high strength degreaser. There's some sort of purple product called 'super clean' that works wonders, but I'm sure others will do just as well. And if there's a combination of rust and sludge, the rust removers and acids won't work until the sludge is removed.
My method is probably not perfect, but I've had good luck with it: First, pressure wash as well as you can to remove all loose/chunkular bits. After pressure washing, drain the water and use the degreaser: Pour some in, swirl it around, let sit for 15 minutes (swirling occasionally), drain, repeat about 3-4 times. Remember that huge volumes of product aren't required. More rinses with smaller amounts of degreaser are far better than pouring a whole pile in and letting sit. One 4 quart jug of the purple stuff is more than enough for one tank.
After draining the degreaser for the last time, air dry as best you can with a blow gun and do an acid wash. Similar process to the degreaser, unless the tank's incredibly rusty, in which case I do what others have suggested: I strap the tank to my cement mixer with the acid and a handful of bolts/length of chain inside and let it tumble itself clean. Make sure whatever you put in there is magnetic as it makes it a lot easier to remove if you can use a magnetic pickup tool. I once foolishly put some stainless bolts in a tank that had a really awkward inset filler cap, and it took ages to shake them out.
Once done with the acid wash, I air dry again with a blow gun as best I can, then do a rinse with WD40. It displaces any remaining moisture (that's what the 'WD' in 'WD40' stands for: Water Displacement). It also coats any bare metal to prevent rusting, and penetrates it's way into any crevises/seams.
The best way to prevent future rusting is to keep it says full, but if for any reason I'm not planning on keeping it full, I'll give it one last rinse with two stroke oil to further coat any bare metal.
Two last notes: I've cometely flip-flopped on my attitude toward liners. I used to love them, but I've bought two tractors now that have had disintegrated liners, and they're a complete nightmare to strip. Not only does it take ages to strip thebold.liner, but they also gum up every portion of the fuel system. It's bad enough for carburetors, but simply awful for injection pumps. I'd be ok using a liner to seal a leak in a tank on a working tractor, but wouldn't use one in a restoration, or anything I intended to hang onto for a few decades.
I've also lost all patience for the store-bought rust removers ('Evap-O-Rust', or similar products). They work marginally ok for light surface rust, but aren't nearly as potent as acids for any heavy rust.