Heat oil in a heavy-bottomed 4- to 5-qt. pot or saucepan over medium-high heat. Add onion and fry, stirring occasionally, 2 to 3 minutes, or until slightly softened. Stir in cinnamon, bay leaf, garlic, ginger, fennel, cumin, and cardamom and fry, stirring, 2 minutes. Add cayenne, coriander, turmeric, and garam masala and fry, stirring, 1 minute. Shred tomatoes into pot with your fingers. Stir in serrano chile, salt, kidney beans, cauliflower, and 1 1/2 cups water. Lower heat to medium-low, cover, and simmer 20 minutes, or until cauliflower is tender and liquid has thickened into a velvety-looking sauce (add more water if necessary).
Season beans with salt. Stir in lemon juice and cilantro. Serve hot over brown rice, with plain yogurt on the side if you like.
Note: Nutritional analysis is per serving of curry.