Add the coconut oil to the Instant Pot and set to SAUTE. Once hot, add the onion and cook until beginning to soften, about 5 minutes. Add the ginger, garlic, curry, garam masala, chili powder, and salt. Cook until fragrant, about 30 seconds. Turn the Instant Pot to OFF. Add a splash of water or chicken broth and stir, using a sturdy plastic or wooden spoon to scrape loose any browned bits that have stuck. Make sure you remove all of the stuck-on bits so that you don't trigger a burn warning.
Add the tomato sauce and cauliflower florets and stir to combine. Lay the chicken breasts on top, then scatter the butter pieces over the top.
Close and seal Instant Pot. Cook on Manual (HIGH) pressure for 12 minutes. Once the time is up, let the pressure release naturally for 10 minutes, then vent to immediately release any remaining pressure.
Carefully open the lid and transfer the chicken to a cutting board. Cut into bite-sized pieces, then return to the sauce. Stir in the half-and-half or coconut milk. Let cool a few minutes, then stir in the Greek yogurt (do not stir it in immediately or it will curdle). Serve with rice and a sprinkle of fresh cilantro.
Notes
TO STORE: Refrigerate leftovers in an airtight container in the refrigerator for up to 3 days.
TO REHEAT: Gently rewarm leftovers in a pot on the stovetop over medium-low heat or in the microwave.
TO FREEZE: Freeze butter chicken in an airtight freezer-safe storage container for up to 3 months. Let thaw overnight in the refrigerator before reheating.