Season the lamb shoulder with the pepper and 2 teaspoons of the salt.
Heat the oil in a large Dutch oven over medium-high heat. Once the oil is glistening, working in batches, brown the lamb on all sides, about 15 minutes total. Transfer the lamb to a plate.
To the same pot, add the onion and cook, stirring often, until softened, about 5 minutes. Stir in the garlic, until fragrant, 1 minute. Stir in the garam masala, cumin, turmeric, cinnamon, and remaining 1 teaspoon of salt until incorporated. Stir in the tomatoes and chicken stock.
Return the lamb to the pot and bring to a simmer. Reduce the heat to low, cover, and cook, stirring occasionally, until the lamb is very tender, about 1½ to 2 hours. Remove the lid and continue cooking until the sauce has thickened slightly, about 20 minutes. Skim fat off the top if desired.
Serve over rice, if using, and serve with naan, yogurt, and cilantro alongside, if desired.