MacLeod made 102 from 107 balls to help the hosts to 266-7 from their 50 overs after they won the toss and elected to bat.
Opener Kyle Coetzer (48) and Craig Wallace (52) also posted decent totals before Chris Sole took four wickets to lead his team to victory.
The first international between the teams was abandoned due to the weather on Thursday and Scotland made a steady start at Grange Cricket Club on Saturday.
Matthew Cross (13) was the first wicket to fall before Coetzer, who hit eight fours and two sixes, followed soon after when his powerful drive from Tanveer Ahmed was superbly caught by the bowler.
Wallace and MacLeod put on 116 for the sixth wicket before becoming the final two wickets to fall, MacLeod eventually caught by Nizakat Khan off the bowling of Tanveer in the final over.
Sole then took over, having Christopher Carter (15) caught by wicketkeeper Cross before his delivery to Aizaz Khan (25) was skied high into the air and taken by Michael Leask at mid-on.
A 90-run stand from captain Babar Hayat (56) and Nizakat (40) kept Hong Kong in contention but once it was broken, the middle order collapsed.
Sole, playing only his third ODI, also took the wickets of Anshuman Rath and Tanwir Afzal as the away side were bowled out for 213 with just under four overs remaining