It was Hamilton who started on pole for the fifth race in a row despite three highly turbulent qualifying sessions, but the Brit had to settle for third place with Max Verstappen in second.
Bottas reduced the championship lead to Hamilton to 44 points after 10 of 17 rounds.
In taking pole, Hamilton had the tough ask of negotiating a long-run into Turn Two, with ample slipstream and overtake opportunities available. The six-time world champion, therefore, opted for soft tyres, which pick up significantly more wear and tear than Verstappen and Bottas' mediums.
The race complexion was changed before it even began, however, as Hamilton was placed under investigation for twice taking a practice start outside of the designated area in the pit lane, which eventually resulted in a 10-second penalty.
Unaware of the impending penalty, Hamilton burst out the blocks in a highly eventful opening lap, holding off the challenge of team-mate Bottas, who looked to overtake round the outside, only to be pushed wide with the Brit maintaining his lead.
The six-time world champion instantly found himself behind the safety car, with Lance Stroll and Carlos Sainz involved in early crashes to take them out of the race, with the green flag eventually waved at the conclusion of the fifth lap.
Hamilton - who has won six out of nine to start the 2020 season - was then swiftly informed of his 10-second penalty which, as it occurred before the first pit stop, meant he had to serve his violation in the pits, rather than adding on the time after the race.
With the soft tyres picking up significant wear as expected, Hamilton was brought into the pits in lap 17, where he served his 10-second penalty and eventually returned into 11th place.
Hamilton was able to claw his way back onto the podium with the 10 in front all subsequently brought into the pits, but he was never able to reduce the gap to Verstappen to below eight seconds.
Sergio Perez of Racing Point, who was largely in a race of his own, finished in fourth place while, despite receiving a five-second penalty for failing to adhere to race director instructions, Daniel Ricciardo of Renault finished in fifth.
A highly impressive Charles Leclerc secured sixth spot, the highest finish for Ferrari since the 70th anniversary at Silverstone five races ago.
He finished ahead of Renault's Esteban Ocon, who just managed to hold onto seventh spot ahead of a battling Daniil Kvyat who pushed him all the way, while Pierre Gasly and Alex Albon completed the top 10.