01 - Combine warm milk, sugar, and yeast in a large bowl. Let stand for 5 minutes until foamy.
02 - Whisk 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. Transfer to a greased bowl, cover, and let rise in a warm place for 1 hour until doubled.
04 - Heat olive oil in a skillet over medium heat. Sauté chopped spinach until wilted, about 2 minutes. Press out excess moisture using a sieve or paper towels.
05 - Combine sautéed spinach, diced ham, shredded cheese, green onions, black pepper, and garlic powder in a bowl. Mix thoroughly.
06 - Preheat oven to 350°F. Grease a 9x13-inch baking dish.
07 - Punch down risen dough. Roll out on a floured surface to a 16x12-inch rectangle.
08 - Spread 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 - Arrange rolls cut-side up in the prepared baking dish. Cover and let rise for 15–20 minutes.
11 - Brush rolls with melted butter. Sprinkle with Parmesan cheese if using.
12 - Bake for 25–30 minutes until golden brown and cooked through.
13 - Let cool for 5 minutes before serving warm.