Prepare the Dough: In a stand mixer with a dough hook, combine flour, yeast, sugar, and salt. Add warm milk, eggs, and butter. Mix on low for 2 minutes, then knead on medium for 5–7 minutes until smooth. Cover with plastic wrap and let rise in a warm place for 1–2 hours, until doubled in size.
Shape the Donuts: On a lightly floured surface, roll dough to 1/2-inch thickness. Cut into 3-inch rounds using a cookie cutter. Place on parchment paper squares on a baking sheet, cover, and let rise for 30–45 minutes.
Make the Bavarian Cream: In a saucepan, heat milk over medium until steaming (not boiling). In a bowl, whisk egg yolks, sugar, and cornstarch until smooth. Slowly pour hot milk into the yolk mixture, whisking constantly. Return to the saucepan and cook over medium heat, stirring, until thickened (about 2–3 minutes). Remove from heat, stir in vanilla, and cool completely. Whip heavy cream to stiff peaks, then fold into cooled custard. Chill until ready to use.
Fry the Donuts: Heat oil in a deep pot to 350°F (use a candy thermometer). Fry donuts 2–3 at a time, 1–2 minutes per side, until golden. Drain on paper towels and cool slightly.
Fill the Donuts: Transfer Bavarian cream to a piping bag with a small tip. Poke a hole in each donut’s side and pipe in filling until slightly plump.
Finish: Dust with powdered sugar using a sifter. Serve fresh for the best taste!