The DAMS driver ran second initially, as poleman Giedo van der Garde made a good start and held on at the front in his Caterham entry.
The Dutchman stretched the lead to as much as 1.8 seconds, but as soon as tyre wear became as issue, Valsecchi homed into view and van der Garde was powerless to fend off the championship leader.
In fact van der Garde slipped behind the well-driven Racing Engineering car of Fabio Leimer too. Following the mandatory pitstops the Swiss even closed in on the yellow and black machine, but a series of fast laps took Valsecchi way out of reach and a hat-trick of Bahrain wins was confirmed.
Van der Garde held on for third, but the main action was behind him. Marcus Ericsson made a storming start to move his iSport car from ninth to fourth, but in the closing stages his tyres were shot and he tumbled down the order.
Tom Dillmann has been elevated to pole position for the GP2 sprint race in Bahrain after several drivers were given penalties for the feature event - including seventh-placed finisher Felipe Nasr.
DAMS driver Nasr and Caterham's Rodolfo Gonzalez had 20 seconds added to their race times as a punishment for disregarding yellow flags - the retrospective time penalties being given in lieu of a drive-through.
The stewards' ruling dropped Nasr from seventh (and therefore second on the race two grid) to 11th and Gonzalez from 14th to 19th.
Fabrizio Crestani (Lazarus) was found guilty of the same offence, but as he retired from the race, he was given a five-place grid penalty - although he was only set to be 25th in the 26-car field in any case following his Friday problem.
Nasr's demotion means erstwhile race two polesitter Marcus Ericsson's iSport car will now be second on the Saturday grid, with Dillmann (Rapax) moving to pole by virtue of being classified eighth rather than ninth in the revised race one results.
Results - 32 laps:
1. Davide Valsecchi (DAMS) 57m35.088s
2. Fabio Leimer (Racing Engineering) + 7.711s
3. Giedo van der Garde (Caterham) + 14.824s
4. Luiz Razia (Arden) + 24.142s
5. Max Chilton (Carlin) + 24.705s
6. Rio Haryanto (Carlin) + 40.965s
7. Felipe Nasr (DAMS) + 45.772s
8. Marcus Ericsson (iSport) + 50.645s
9. Tom Dillmann (Rapax) + 52.522s
10. Johnny Cecotto (Addax) + 55.578s
11. Esteban Gutierrez (Lotus) + 56.211s
12. Nathanael Berthon (Racing Engineering) + 1m06.906s
13. Brendon Hartley (Ocean) + 1m07.254s
14. Rodolfo Gonzalez (Caterham) + 1m09.206s
15. Simon Trummer (Arden) + 1m15.486s
16. Julian Leal (Trident) + 1m16.363s
17. James Calado (Lotus) + 1m20.506s
18. Stephane Richelmi (Trident) + 1m21.441s
19. Nigel Melker (Ocean) + 1m29.955s
20. Fabio Onidi (Coloni) + 1m47.146s
21. Stefano Coletti (Coloni) + 1 lap
22. Giancarlo Serenelli (Lazarus) + 1 lap
23. Ricardo Teixeira (Rapax) + 1 lap