After overcoming break point in his opening service game, Fish delivered two devastating forehand volleys to break Almagro in game four.
He then further punished the Spaniard with dominant first-serving to wrap up the set 6-3.
Neither seeded player had dropped a set on their way to this quarter-final and the American looked likely to continue his flawless record as he broke in the first game of the second set.
Fish was in complete control, but a lapse of concentration in the eighth game allowed the 12th seed to restore parity and eventually force a tie-break, which Almagro claimed 7-2.
Disappointed by squandering the advantage in the previous set, Fish upped his level of aggression in the decider.
Almagro survived no fewer than six break points before he finally fell behind, allowing Fish to serve out to love and seal a 6-3 6-7 6-3 win.
World number eight Fish won 51 of 53 points behind his first serve.