The German breezed past Alejandro Falla in the last 16, but was pushed hard by his Italian opponent on Friday before progressing to the last four of the ATP 250 clay court tournament he won 12 months ago.
The first set was a tight affair, with the number two seed claiming the crucial break in the eighth game to move ahead.
The second followed a similar pattern, although this time it was Seppi who broke in the eighth before consolidating his lead and sending the match into a decider.
Haas moved 4-2 ahead in the third, but was broken straight back as Seppi wiped out the advantage immediately.
However, the German responded in kind, converting his fourth break point in game eight to set up victory and a semi-final tie with Martin Klizan.
Klizan overcame Denis Istomin 7-6 (7-3) 1-6 6-1 in another back-and-forth affair.
The Slovak looked to be in trouble at the end of the first set when Istomin broke for a 6-5 lead, but Klizan hit straight back to take the set into a tie-break, which he won by reeling off four straight points from 3-3.
The second set was one-way traffic as Istomin blew away Klizan, breaking him twice on the way to levelling the match.
The decider was similarly one-sided, Klizan racing into a 5-0 lead before sealing victory by converting his second match point in game seven.
Top seed Fabio Fognini progressed to the semis after a comfortable 6-2 6-2 win over Thomaz Bellucci.
The Italian broke his opponent three times in the first set to move in front, and broke a further four times in the second to seal victory in just one hour and nine minutes.
He will face Jan-Lennard Struff for a place in the final, after the German came from a set down to beat Ricardas Berankis 4-6 6-3 6-4.