Heat oil in a large skillet over medium heat, and fry the chicken pieces until browned, about 8 minutes per side. Set the chicken aside.
Place the spinach into a large pot with 1/4 cup of water, bring to a boil, cover the pan, and remove from heat. Allow the spinach to steam for about 10 minutes, then place into a blender, and blend until very finely chopped. Set the spinach aside.
Place the onions, garlic, and ginger into the skillet, and fry over medium heat, stirring frequently, until lightly browned, about 10 minutes. Pour in the tomatoes, ground coriander, cayenne pepper, turmeric, cardamom, cloves, and salt; stir in 1 tablespoon water, and cook, stirring frequently, for 10 minutes. Pour in the milk, stir to combine, and return the chicken pieces to the skillet. Bring the mixture to a simmer, reduce heat, cover, and simmer until the chicken is tender, about 20 minutes. Stir the spinach and garam masala into the skillet, and cook until the spinach starts to stick to the pan, about 15 minutes.
Stir in sour cream, and bring the mixture just to a simmer. Remove from heat and stir in butter.