Bottas claimed his second success of a rearranged 2020 season – his other came in the opener in Austria – to close the gap to his Mercedes team-mate in the overall standings.
Championship leader Hamilton had to settle for third place, also finishing behind Max Verstappen, after a pair of time penalties proved crucial to his hopes of glory.
Having coming through what he described as a "horrible" qualifying session on Saturday to sit on pole, the Briton was placed under investigation before the action begun in Sochi after carrying out a practice start outside the designated area.
The six-time world champion held off the challenge of a fast-starting Bottas to retain the lead during an eventful opening lap that saw the safety car deployed, though that was far from the end of the drama.
When racing resumed, Hamilton was informed he had been penalised for his earlier infringement, a 10-second punishment he had to serve while pitting on lap 17 to switch to hard tyres.
He returned to the track down in 11th place and while able to move through the field, his hopes of a third straight success in Russia – a result that would have seen him equal the legendary Schumacher's career tally of 91 victories – had been dashed by that enforced delay.
Still, Mercedes did manage to maintain their 100 per cent record at the track, Bottas staying clear of trouble to prevail as he finished just under eight seconds ahead of Verstappen's Red Bull.
Outside of the podium places, Sergio Perez – who held clear-the-air talks with current employers Racing Point, the team he will be leaving at the end of the campaign – produced an excellent drive to claim fourth.
Daniil Kvyat finished eighth ahead of AlphaTauri colleague Pierre Gasly, while Alex Albon was 10th, the position he had been due to start from before accepting a five-place grid penalty for a gearbox change.
'THIS IS JUST RIDICULOUS, MAN'
After avoiding any punishment for running off at Turn 2 during qualifying, Hamilton did not come out unscathed when caught out for a practice start just outside the exit of the pit lane.
Hit with not one but two five-second penalties, Hamilton responded on the team radio by saying: "This is just ridiculous, man".
He also expressed his dissatisfaction with the timing of his stop, which came straight after clocking two seriously quick laps as he attempted to extend his lead.
It is unlikely he will have to wait too long to tie with Schumacher – and indeed move past the German's total – but this will feel like one that got away.
SAFETY FIRST IN SOCHI
A track that allows drivers to build up serious speed before the first notable turn always had the potential to provide incident.
Carlos Sainz was one of a number forced off but then he clipped the bollards on the chicane as he attempted to re-enter, ending his involvement early.
Lance Stroll lasted only a little longer, his Racing Point car sent into a spin after being bumped by Leclerc's Ferrari, though officials opted against investigating the incident.
RAIKKONEN GOES RACING ON
While Hamilton missed out on matching a record, Kimi Raikkonen made his 322nd F1® start, drawing him level with Rubens Barrichello for top spot on the all-time list.
"I must confess I thought nobody would ever get close to that number, but well done," Barrichello said in a social media post ahead of the race, before adding that Fernando Alonso (311) is not too far behind ahead of the Spaniard's return to the grid in 2021.
Raikkonen was unable to mark his achievement with a top-10 finish, though, as he ended up in 14th position, one place behind Sebastian Vettel.
IN THE POINTS
- Valtteri Bottas (Mercedes)
- Max Verstappen (Red Bull) +7.729s
- Lewis Hamilton (Mercedes) +22.729s
- Sergio Perez (Racing Point) +30.558s
- Daniel Ricciardo (Renault) +52.065s
- Charles Leclerc (Ferrari) +62.1862
- Esteban Ocon (Renault) +68.006s
- Daniil Kvyat (AlphaTauri) +68.740s
- Pierre Gasly (AlphaTauri) +89.766s
- Alex Albon (Red Bull) +97.860s
- Lewis Hamilton (Mercedes) – 205
- Valtteri Bottas (Mercedes) – 161
- Max Verstappen (Red Bull) – 128
- Lando Norris (Renault) – 65
- Alex Albon (Red Bull) - 64
- Mercedes – 366
- Red Bull – 192
- McLaren – 106
- Racing Point – 104
- Renault – 99
Germany is the next stop in the Formula 1® calendar for 2020, the Nurburgring hosting the Eifel Grand Prix on October 11.