In a small saucepan, melt the butter and then add the milk. Warm the mixture until it's lukewarm, and then add it to the bowl of a stand mixer fitted with the dough hook attachment. Note: the milk should not be hot, just barely warm to the touch, or it will kill the yeast.
Add the yeast to the bowl with the milk and butter mixture, and mix to dissolve. Then add the salt and sugar, and mix together.
With the mixer running on low speed, slowly add the flour. Once all the flour has been added, continue to knead for about 10 minutes. The dough should be smooth and pulling away from the side of the bowl.
Cover the bowl (no need to transfer to a separate greased bowl) and allow to rise for 45 minutes to an hour, or until about doubled in size. Note: find a nice warm spot for your dough to rise.
While the dough is rising, make the filling by mixing together the softened butter, brown sugar, cinnamon, nutmeg, and cardamom until uniform. Set aside.
Once the dough has risen, punch it down and divide it into 1-inch wide strips. Braid each strip and shape into a ball. Place on a baking sheet lined with parchment paper.
Preheat the oven to 375°F (190°C). Let the dough rest for 10-15 minutes before brushing the tops with the beaten egg.
Bake for 20-25 minutes or until golden brown.
While the rolls are baking, make the dipping sauce by mixing together the cream cheese, sour cream, powdered sugar, vanilla extract, and water until smooth.
Serve the rolls warm with the dipping sauce.