To make the cheese, pour the milk into a deep two-quart pot and place on your stove range. Turn the heat to medium-high and leave the pot uncovered. While waiting for the milk to reach a boil (about 30 minutes), place three layers of cheesecloth in a wire-mesh strainer and tape the cheesecloth around the edges so the hot cheese cannot pull it away from the mesh. Place the strainer over a storage container to save the liquid (whey) for the stock of the soup.
When the milk begins to boil, add the lemon juice and stir. In a few seconds the milk should begin to separate. The color will change from opaque white to a cloudy greenish-yellowish color. You should begin to find clumps of thick white stuff floating around in the pot. This is good! Take the pot off the burner and slowly pour the liquid through the cheesecloth-lined strainer. Once the soup pot is drained of liquid, wash it. Allow the whey to drip through the mesh until most of it has dripped. Pull the cheesecloth up around the cheese. Keep the strainer over the storage container. Carefully squeeze the cheesecloth-wrapped curds to get the rest of the water out. This will be very hot! Keep a bowl of ice water nearby. When you feel your fingers getting burned, cool them for a few minutes. Continue squeezing the curds until you have removed most of the excess water.
Place a large heavy, flat object on top of the cheesecloth-wrapped cheese and let it sit for at least 6 hours, overnight if possible. If you have room in your refrigerator, place the cheese with its weight there to cool down. (I like to turn a pie tin upside down, place the cheesecloth-wrapped cheese on top of it, place another pie tin right-side-up on top of it, and then place the weight in the top pie tin.)
When the cheese is very firm remove it from the pie tins. Pull off the cheesecloth and discard.
Heat the oil in a small pot until hot enough for frying. Cut the cheese into 1⁄2-inch cubes. Dredge the cubes in flour so they will not stick together. In batches, carefully place the cubes in the oil and fry until golden brown. Remove from the oil and place on a paper towel to soak up any excess grease. Set aside.
To make the garam masala, place a heavy-bottomed or cast iron skillet over high heat. Once hot, add the broken cinnamon sticks. Toast for a couple minutes or until a few shades darker and remove. Repeat this step with the cumin, coriander, black peppercorns, cloves, and cardamom pods. As each of these spices will toast at different rates, I implore you to prepare each spice individually. Once all the spices are toasted, grind them together in a coffee mill or spice mill to a fine powder. Keep sealed in an opaque jar in a dark, cool area until ready to use.
To make the soup, heat the oil in a soup pot. Add the garlic and sauté until golden. Add the onion and stir well. Add 1 tablespoon salt and stir again. Cover and let simmer for 5 minutes, or until the onion is translucent. Add the ginger and the peppers and mix well. Cover and let simmer for 5 minutes.
Add the garam masala and ground rice and mix well. Add 1 cup of the reserved whey or water. Mix well, cover, and let cook for 10 minutes.
Add the spinach in four batches. After each batch stir to mix well, cover, and let the spinach reduce.
Once the spinach has decreased in size, add 3 more cups of whey and stir well. Cover and let reach a boil. Reduce the heat to medium and let simmer for 20 minutes.
Purée the soup in batches. Press through a strainer into a storage container. Discard any lumps left in the strainer.
Wash out the soup pot. Place the soup back in the pot. Add the coconut milk, red bell peppers, and fried cheese. Place back on the stove, cover, and let simmer over medium heat for about 15 minutes.
Remove from the heat and add the lemon juice. Serve immediately.