Whisk together the yogurt, 1 tablespoon garam masala, and 1 tablespoon kosher salt. Add the chicken and mix until fully coated. Cover and marinate for at least 30 minutes, or up to overnight.
Heat 2 tablespoons of vegetable oil in a large pan over medium-high heat. Add the marinated chicken in batches and sear for 2-3 minutes per side until golden brown.
Remove the chicken from the pan and add the diced onion, grated ginger, and sliced garlic. Season with salt and pepper and sauté for 3 minutes until softened.
Add the paprika, cumin, 1 tablespoon garam masala, and turmeric (if using). Stir and toast the spices for 1-2 minutes until fragrant.
Pour in the can of crushed tomatoes and ⅔ cup of water. Stir to combine and let simmer for 5-8 minutes until the sauce has reduced by about 30%.
Add the seared chicken back to the pan and let simmer for 3-5 minutes until the chicken is cooked through.
Pour in the heavy cream and stir to combine. Let the sauce simmer for 3-4 minutes, then remove from heat and stir in the 2 tablespoons of unsalted butter until melted and emulsified.
Taste and adjust salt as needed. Serve the curry over steamed rice, garnished with fresh cilantro.
