01 - Combine warm milk, sugar, and yeast in a large bowl. Let stand for 5 minutes until mixture becomes foamy.
02 - Stir melted butter, egg, and salt into the yeast mixture. Gradually incorporate flour until a soft, slightly sticky dough forms.
03 - Knead dough on a lightly floured surface for 5-7 minutes until smooth and elastic. Place in a greased bowl, cover, and let rise in a warm area for 1 hour until doubled.
04 - Heat olive oil in a skillet over medium heat. Sauté spinach until wilted, about 2 minutes. Press out excess moisture using a sieve or paper towels.
05 - Mix sautéed spinach, diced ham, shredded cheese, green onions, black pepper, and garlic powder in a bowl until well combined.
06 - Preheat oven to 350°F. Grease a 9x13-inch baking dish with butter or cooking spray.
07 - Punch down risen dough and roll out on a floured surface to a 16x12-inch rectangle.
08 - Distribute the ham and spinach filling evenly over the dough, leaving a ½-inch border around edges.
09 - Starting from the long side, roll dough tightly into a log. Cut into 12 equal slices.
10 - Place rolls cut-side up in prepared baking dish. Cover and let rise for 15-20 minutes.
11 - Brush rolls with melted butter and sprinkle with Parmesan if using. Bake for 25-30 minutes until golden brown and cooked through.
12 - Allow rolls to cool in the dish for 5 minutes before serving.