Make the dough. In a large bowl, whisk together the warm milk and yeast. Add the egg, granulated sugar, and melted butter and whisk to combine.
Stir in the salt and bread flour until a sticky dough forms. Add additional flour 1 tablespoon at a time until the dough begins pulling away from the bowl but is still slightly tacky.
Knead and rise. Turn the dough onto a lightly floured surface and knead for about 3 minutes, until smooth. Form into a ball and place in a lightly greased bowl. Cover and let rise for 1–1½ hours, or until doubled in size.
Roll out the dough. Roll the dough into approximately a 17 × 10-inch rectangle.
Add the filling. Spread the softened butter evenly over the dough. Mix the brown sugar and cinnamon together, then sprinkle evenly over the butter.
Roll and cut. Starting from the long edge, tightly roll the dough into a log. Trim the ends if needed and cut into 12 rolls.
Second rise. Place the rolls in a buttered 9 × 13-inch baking dish. Cover and let rise for 20–30 minutes in a warm place (about 100°F), or 45–60 minutes at room temperature, until visibly puffed.
Add the heavy cream. Pour enough heavy cream into the bottom of the baking dish to lightly cover the bottom. You want a thin layer — the rolls should not be swimming in it.
Bake. Bake at 350°F for 20–25 minutes, until lightly golden and fluffy.
Make the frosting. Beat the softened cream cheese and butter together until smooth. Add the vanilla, then gradually mix in the powdered sugar. Beat until fluffy and creamy.
Let the cinnamon rolls cool slightly, then spread the cream cheese frosting generously over the warm rolls.