Fiorentina will now meet Udinese, 2-1 winners over AC Milan, in the last four of the competition with Roma, who ousted Juventus 1-0, meeting either Napoli or holders Lazio following their tie on 29 January.
Heavy rain hampered proceedings at the Artemio Franchi stadium but Vincenzo Montella's men were given an early boost when Josip Ilicic beat Simone Farelli with a low drive to give the hosts a 20th minute lead.
Siena, however, had romped to a 4-1 win away to Catania in the last 16 and were proving tough to subdue.
Mario Beretta's side were finally rewarded when Guillermo Giacomazzi beat Fiorentina 'keeper Neto with a superb glancing header from Francesco Valiani's cross on the right to level in the 59th minute.
Fiorentina, whose sixth and last Cup triumph came in 2001, upped the tempo in the final third of the game but it was from an Ilicic corner that the hosts found the breakthrough with German Compper heading past Farelli.
Ilicic then left the pitch on a stretcher after suffering a knock to his shoulder to be replaced by Ryder Matos.
Fiorentina dominated the final exchanges but the hosts were made to sweat at the death when Giocamazzi forced a fine one-handed diving save from Neto on 90 minutes.
On Wednesday, Clarence Seedorf's second match in charge of AC Milan ended in a 2-1 home defeat at the hands of Udinese.
Mario Balotelli gave Milan a sixth-minute lead before they were pegged back by a 41st minute penalty converted by Colombian Luis Muriel.
Udinese dominated the second half and grabbed the winner in the 77th minute through Uruguayan star Nico Lopez.
The defeat also severed a potential European route for AC Milan who are already 30 points behind leaders Juventus in Serie A.
On Tuesday a late goal from Ivorian striker Gervinho helped Serie A title challengers Roma book their ticket for the final four where the Giallorossi will meet either Napoli or Lazio.
Roma, defeated in last year's final by city rivals Lazio, had suffered a 3-0 league defeat to Juventus a fortnight ago.