Pole-sitter Marquez fell on the 13th of 20 laps while running a close second, the Honda rider’s crash leaving Rossi clear to take his fourth win of the season and lead an all-Italian podium with Danilo Petrucci and Andrea Dovizioso.
Spaniard Lorenzo, who had seized the lead from second on the grid but then faded, finished fourth.
Rossi now has 236 points to Lorenzo’s 224 with six races remaining. The pair had started the day level on points but with Lorenzo ahead on race wins.
Marquez, now 77 points off the lead, conceded that his bid for a third successive title was effectively over.
“We can say that maybe now the championship will be too difficult,” the Spaniard told reporters.
The start was delayed for 30 minutes when rain began to fall after the race had originally been declared dry. That led to riders returning to the pits for a change of tyres and setup.
Lorenzo seized the lead at the start but Rossi, winning for the first time at Silverstone, passed him on the second lap to cheers from the 73,000 strong crowd.
Only Marquez was able to take the fight to him until a front-end wobble threw the Spaniard into the gravel at Copse.
“When I saw Marc crash…I slowed down a little bit because I thought I had more advantage,” said Rossi, who finished three seconds ahead of Petrucci.
“I hoped Danilo would not risk too much because it’s his first podium but anyway I had to stay concentrated. At the end the conditions were more difficult because there was more water so I didn’t want to make any mistake.”
Petrucci’s second for the Pramac Ducati team — after he started 18th — came at the expense of works Ducati rider Andrea Dovizioso, who had to settle for third.
Rossi gave Petrucci a big hug after they stepped off their bikes.
Scott Redding was the top British rider, finishing sixth for the Marc VDS Honda team after announcing his move to Pramac for the 2016 season.
(Reporting by Alan Baldwin, editing by Ed Osmond)