Umar Gul (3 for 48) bowled well in the final overs to make sure good work by spinners Saeed Ajmal (3 for 42) and Shahid Afridi (2 for 42) did not go waste as they dismissed Sri Lanka for 236 in the penultimate over.
Pakistan built upon an opening stand of 151 between Mohammad Hafeez and Imran Farhat to reach a total of 257 for 8 off its 50 overs. Hafeez smashed nine fours and a six in a topscore of 83 off 101 balls, while left-hander Farhat struck six fours and a six in 70 off 82 deliveries.
Sri Lanka was bowled out for 236 off 48.5 overs with off-spinner Saeed Ajmal (3 for 42) and pacer Umar Gul (3 for 48) holding their nerve at key moments. Captain Tillakaratne Dilshan hit 64 and fellow veteran Kumar Sangakkara contributed 45.
Dilshan brought up his fifty off 62 balls but was soon involved in a mix-up with Sangakkara which changed the course of the match. Sangakkara, who struck three fours in 45, was run out by Afridi's direct hit from mid-on after Dilshan turned down a single.
Afridi soon provided the key scalp of Dilshan, who was unlucky to deflect a wide ball back onto his leg stump as he tried to sweep.
Veteran Mahela Jayawardene became the ninth player to pass 10,000 runs in one-day cricket when he reached 13 and shared a restorative stand of 35 with Dinesh Chandimal.
But Ajmal's first strike was a crucial one, with Jayawardene stumped for 17 after slick work by wicket-keeper Sarfraz Ahmed.
Chandimal, on his 22nd birthday, contributed 31 off 47 deliveries before he also fell to Ajmal, slicing a catch to extra cover at 186 for 5 in the 40th over.
Angelo Mathews held together the lower order but only Jeevan Mendis (19 off 15 balls) could supply any meaningful resistance. Mathews was left 32 not out after Gul returned to seal the victory for Pakistan with the wickets of Seekkuge Prasanna and Dilhara Fernando.
Earlier, Pakistan seemed set for a bigger total following Hafeez and Farhat's opening stand, only for Sri Lanka to hit back in the latter half of the innings through leg-spinner Prasanna (2 for 39) and pace ace Lasith Malinga (2 for 57).
Younus Khan's 42 off 52 balls ensured the hosts would get to a competitive total.
Hafeez and Farhat started steadily when Pakistan won the toss for the first time in the series and chose to bat. The pair took 40 off the first 10 overs before raising the scoring rate to reach 100 off 20 overs, with Hafeez blasting four fours in one over from Dilhara Fernando and arriving at his half century first, off 68 balls.
Farhat crossed his fifty off 60 balls and Pakistan looked to be coasting at 150 for no loss after 29 overs.
However, the innings subsided quickly when both openers perished within 10 runs. Prasanna made the breakthrough when a flatter delivery rushed through to bowl Hafeez and Dilshan removed Farhat, who holed out to long-on.
Pakistan slipped to 167 for 3 as Abdul Razzaq failed to deliver as a pinch-hitter, lofting Prasanna straight to long-on, while Malinga returned to further energise the Sri Lankans when he bowled Umar Akmal for 7.
Pakistan slid even further to 193 for 5 in the 40th over when captain Misbah-ul-Haq was comically run out after he and Younus Khan ended up in the same crease.
Younus and fellow veteran Shahid Afridi added a run-a-ball 33 for the sixth wicket to revive Pakistan.
Younus, who helped take Pakistan past 250, was run out by Prasanna's direct hit from mid-wicket in the final over.