Heat peppercorns, coriander, cumin, cardamom, allspice, and cinnamon in an 8-qt. saucepan over medium heat until fragrant, 1–2 minutes. Let cool slightly, then transfer to a spice grinder with curry powder and nutmeg; grind into a powder. Add 3 tbsp. spice mixture, lamb, salt, pepper, and 9 cups water to pan; bring to a boil. Reduce heat to medium-low; cook, covered slightly, until lamb is tender, about 1 hour. Using a slotted spoon, transfer lamb to a bowl; set aside. Increase heat to medium; simmer until stock is reduced to 4 cups, 25–30 minutes. Transfer to a bowl; set aside.
Heat oven to 425°. Place eggplant in a colander set over a bowl; sprinkle generously with salt and toss to combine. Let sit 30 minutes, then rinse and pat completely dry with paper towels. Transfer eggplant to a baking sheet and toss with 1⁄2 cup oil; spread into an even layer. Bake until golden and tender, about 30 minutes; transfer to a bowl and set aside. Place cauliflower on baking sheet; toss with 1⁄4 cup oil and salt and spread into an even layer. Bake until golden and tender, 25–30 minutes; transfer to a bowl and set aside. Toss rice with melted butter in a bowl; set aside.
Wipe saucepan clean and add 1⁄4 cup oil; place over medium-high heat. Add garlic and onion; cook, stirring occasionally, until golden, 5–7 minutes. Add remaining spice mixture, reserved lamb, eggplant, and cauliflower, plus salt and pepper; cook until fragrant, about 5 minutes. Transfer lamb mixture to a bowl and wipe saucepan clean. Rub remaining oil over bottom and sides of pan and arrange tomato slices in an even layer. Spoon lamb mixture over tomatoes and spread rice over top. Pour reserved stock over rice. Using a spatula, press mixture into a compact form; bring to a boil. Reduce heat to medium-low; cook, covered, until rice is tender, about 35 minutes. Let cool 10 minutes, then uncover and place a serving platter upside down over the top. Invert the pan and tap on the bottom of pot to help release tomatoes; lift pan away. Serve with yogurt.