Coat a large pot with oil and place it over medium heat. Add the onion, garlic, ginger and optional serrano pepper. Sauté until the onion is soft and translucent, about 5 minutes.
Add the cooked beans and lemon juice. Stir to incorporate and cook for 2 minutes. Lightly mash about half of beans with a fork or potato masher. Add the tomatoes with their liquid, coconut milk, curry powder, garam masala, coriander, cumin, turmeric and optional cayenne. Bring the mixture to a simmer and lower the heat. Allow to simmer over low heat, stirring occasionally, for 10 minutes, adding a bit of water if it becomes too thick.
Stir in the spinach and cook until it takes up the flavors of the curry, about 10 minutes, as the curry thickens a little. Remove from heat. Season with salt and pepper to taste and stir in most of the cilantro.
Divide among bowls or plates. Serve with rice and sprinkle with fresh cilantro.