After a quiet start, Linfield began to flex their muscles and took control of the first half without really coming close to breaking the deadlock.
Rhys Brennan's strike from the edge of the box was the closest the Blues came to finding the breakthrough in the first half, with Aaron McCarey making just two real saves from Adam Frizzell and Fitzpatrick respectively despite the Blues' dominance.
The Ports finished the first half on top and had the ball in the back of the net, but Michael Hewitt's close range strike was ruled out for offside. Chris Johns made a smart save to deny Jack Scott with Hewitt following in, but he had strayed offside.
The hosts came straight out of the blocks after the restart and were awarded a penalty within two minutes as Shields bundled Fyfe to ground in the area, with Kennedy stepping up to fire the Ports into the lead.
Linfield responded swiftly and found themselves level again after Brennan fired past McCarey from the edge of the box into the bottom corner with a pinpoint right-footed strike.
The winner came in the 80th minute as Fitzpatrick forced the ball home at the back post following Kyle McClean's deep corner to complete the comeback for the Blues.