In a large bowl, combine the yogurt, lemon juice, garam masala, turmeric, cumin, paprika, and salt. Add the chicken pieces and toss to coat. Cover and refrigerate for at least 30 minutes or up to overnight.
Heat the olive oil in a large skillet over medium-high heat. Add the marinated chicken in a single layer, working in batches if needed. Cook for 3 to 4 minutes per side until golden with some charred spots. Remove and set aside.
In a large deep skillet or pot, melt the butter over medium heat. Add the diced onion and cook for 5 to 6 minutes until soft and translucent.
Add the garlic and ginger and cook for 1 minute until fragrant. Stir in the garam masala, cumin, and chili powder and cook for another 30 seconds until the spices are toasted and aromatic.
Pour in the crushed tomatoes and bring the sauce to a simmer. Cook for 10 minutes, stirring occasionally, until the sauce has thickened and darkened slightly in color.
Stir in the heavy cream and sugar. Let the sauce simmer gently for 3 to 4 minutes until heated through and creamy. Season with salt to taste.
Add the cooked chicken back to the sauce and stir to coat. Simmer for 5 minutes so the chicken absorbs the flavors. Serve over steamed basmati rice, garnished with fresh cilantro.