Stoner moved into the world championship lead for the first time after holding off Lorenzo.
The Australian did just enough to keep his lead from the start, and was then able to stretch away rapidly over the opening laps.
Yamaha's Lorenzo found himself 1.4 seconds down after just three laps, but as his tyres began to warm he gradually closed the gap - breaking the lap record in the process - until he was right on Stoner's tail with 16 laps still to go.
At that point it seemed the Spaniard would be a real victory threat, but Stoner (Honda) managed to pick up his pace, control the gap and ultimately seal his second straight win.
Lorenzo followed him home, just a couple of bike-lengths behind, with the second works Honda of Dani Pedrosa a similarly small margin back in third.
Pedrosa had taken the lead momentarily at the start, but a big wobble allowed Stoner and Lorenzo to slip by on the run down to the second turn.
From there the Spaniard never fell away from the lead battle but was equally never able to assert himself as a serious threat.
Fourth was collected by Tech 3 Yamaha's Andrea Dovizioso following a race-long battle with stablemate Cal Crutchlow.
The Briton shadowed Dovizioso for much of the race, but after running wide four laps from the end he was not quite able to get back in touch and finished fifth.
Behind him Alvaro Bautista (Gresini Honda) and Valentino Rossi (Ducati) had relatively quiet rides to sixth and seventh.
Both were originally part of a five-bike fight for fourth, but as the field separated they found themselves in increasingly comfortable positions. It is only the second time in the past nine months that Rossi has finished inside the top eight.
There was no such joy for his works Ducati team-mate Nicky Hayden, who came home 11th.
Yamaha's Ben Spies was another struggling on factory machinery. He originally ran as high as fourth but slipped back alarmingly and ended up duelling with LCR Honda's Stefan Bradl for eighth.