In a small bowl, combine yogurt, lemon juice, 1 tsp (5 mL) garlic and 1 tbsp (15 mL) garam masala. Pour over chicken in a large resealable bag and mix to evenly coat. Allow to marinate in the refrigerator for a minimum of 30 minutes and up to 1 day for more flavour.
In a large skillet, heat 1 tbsp (15 mL) of vegetable oil over medium heat. Add chicken and cook until golden brown and an internal temperature of 165°F (74°C) is reached. Remove from pan and set aside.
Add remaining 1 tbsp (15 mL) oil to pan and sauté onions over medium-low heat. Stir in salt. Sauté 10 to 15 minutes until onions are translucent and a deep golden brown, making sure not to burn them. Add remaining 1 tsp (5 mL) garlic, ginger, remaining 1 tbsp (15 mL) garam masala, cardamom, cumin and cayenne pepper. Cook 1 minute until aromatic. Stir in tomatoes and bring to a boil. Reduce heat to low and simmer for 5 to 10 minutes. Stir in coconut milk and simmer sauce for 5 minutes. Place sauce in a blender and puree until smooth (ensure there is somewhere for steam to escape from the lid).
Bring sauce back to a simmer and add cooked chicken. Simmer for 3 minutes or until chicken is heated through.