Both Lowes and Gardner ran close on the final lap, but the former resisted pressure from the Ajo KTM rider to strengthen his championship lead.
Marco Bezzecchi jumped poleman Lowes off the line, with the VR46 rider keeping the Briton at bay across the opening lap as Ajo KTM rookie Raul Fernandez moved into third ahead of teammate Gardner.
Such was the pace of the leading quartet that they’d pulled a gap of 1.7 seconds to the rest of the pack by lap three.
Lowes made his move for the lead in the slipstream on the run to Turn 1 at the start of lap four, while Gardner put on a risky – but successful – raid for third on Fernandez at Turn 10.
The gap between Lowes and Bezzecchi immediately opened out to six tenths, with Gardner quick to dispatch of the Italian at Turn 1 on lap six to begin his chase of the lead.
Lowes didn’t look as comfortable on his Marc VDS Kalex as he did a week ago, but managed to hold off Gardner.
Having settled into his rhythm Lowes looked more at ease on his bike at mid-distance, though Gardner regrouped in the latter stages to put pressure on the leader.
Lowes responded to this threat emphatically, the Marc VDS rider firing in a race-best lap of 1m59.026s three tours from the end to open his lead out to over half a second.
Gardner dug deep to keep Lowes in his crosshairs, the Ajo rider improving on Lowes’ fastest lap with a 1m58.991s on the penultimate tour.
The pair ran line astern through the final corners of the race, Gardner looking at a move at Turn 15 but could find no way through.
Lowes covered his line on the way into the last corner, a small moment on acceleration for Gardner allowed the Marc VDS rider to get to the chequered flag 0.190s in front.
Fernandez took a comfortable maiden rostrum in third on the sister Ajo bike having seen off Bezzecchi, while Honda Team Asia rookie Ai Ogura was an impressive fifth.
Augusto Fernandez was sixth on the second Marc VDS Kalex, Celestino Vietti putting on another impressive rookie display in seventh on the VR46 Kalex ahead of Pons’ Stefano Manzi, Xavi Vierge (Petronas Sprinta) and Gresini’s Fabio Di Giannantonio.
Joe Roberts (Italtrans) crashed out of fifth in the early stages of the race, while fellow American Cameron Beaubier slid out of his second Moto2 start for American Racing.
Petronas Sprinta’s Jake Dixon was involved in a collision with Intact GP’s Marcel Schrotter, while Tom Luthi (SAG), Aspar’s Aron Canet and MV Agusta stand-in Tommaso Marcon also crashed out.
Lowes heads to the third round of the season in Portugal in two weeks’ time heading the championship by 10 points from Gardner.