It was a deserved win for the home side which led 22-11 at halftime and scored seven tries to four.
Otago made countless mistakes and did not value the ball high enough.
Bay of Plenty would go on to play Wellington in the final on Friday.
Bay of Plenty 48 (Joe Webber 2, Lalakai Foketi 2, Henry Stowers, Terrence Hepetema tries; penalty try; Mike Delany 4 con, pen) Otago 32 (Sam Anderson-Heather, Sione Teu, Vilimoni Koroi, Tei Walden tries, Fletcher Smith 3 con, Josh Ioane 2 pen) Halftime: 22-11 BOP