The two-time Wimbledon winner overcame a second-set blip to reach the 37th WTA final of her career and her second in Doha, where she won the 2018 title.
Kvitova ended a run of four straight defeats to Barty, including in the Australian Open quarter-finals earlier this year.
Australia's Barty has now lost in back-to-back semi-finals after her last-four loss to eventual champion Sofia Kenin in Melbourne.
It will be Kvitova's first final since April last year in Stuttgart.
The 29-year-old Czech, ranked 11th in the world, is chasing a 28th tour title.
Earlier on Friday, Sabalenka dispatched Russian veteran Svetlana Kuznetsova 6-4, 6-3.
Ninth seed Sabalenka, 21, broke twice former Grand Slam champion Kuznetsova four times as she reached a 10th career WTA final -- her first of the 2020 season.