The 32-year-old, who will defend his 5 000 and 10 000 metres titles at the Olympics in Rio de Janeiro later this year, finished two seconds behind Heath, who completed the eight-kilometre course in 25 minutes and 29 seconds.
On a bitterly cold afternoon in the Scottish capital, Farah was in contention for victory until the closing stages, but Heath made light of muddy conditions to outpace him in a sprint finish.