Mix yogurt, lemon juice, garam masala, paprika, cumin, and salt. Coat the chicken, cover, and refrigerate for at least 30 minutes or up to 8 hours.
Heat oil in a large skillet over medium-high. Brown chicken in batches for about 3 minutes per side; transfer to a plate. It will finish cooking in the sauce.
Reduce heat to medium. Melt butter, then cook onion until soft, 5 to 6 minutes. Stir in garlic, ginger, and tomato paste; cook 1 minute.
Add crushed tomatoes and optional cayenne. Simmer gently for 10 minutes, stirring, until slightly thickened.
Return chicken and juices to the skillet. Simmer 8 to 10 minutes, until the thickest pieces reach 165°F (74°C).
Stir in cream and warm gently for 2 minutes without boiling. Taste, adjust salt, finish with cilantro, and serve over basmati rice.