Place the dry beans in a large bowl. Pour enough water to cover them completely. Soak them for 6 hours or overnight. Drain, rinse and remove any debris or shriveled beans. Set aside.
In a large pot or Dutch oven over medium-high heat, cook the bacon stirring often, until it becomes crispy (or until desired doneness). Remove the bacon from the pot and transfer it to a plate lined with paper towels. Drain all but 2-3 tablespoons of the bacon grease from the pot.
In the same pot, sauté the onions and the jalapeno peppers (or serrano peppers) stirring occasionally, for about 4 minutes or until the onions become tender and translucent. Stir in the garlic and cook for about 30 seconds to a minute or until aromatic.
Return the bacon into the pot, add the drained beans, the broth and water and bring to a boil. Cover the pot, lower the heat to low and simmer for 45 minutes, stirring occasionally. After this time, the beans should be almost tender. Periodically check the beans to make sure that they are still covered with liquid. If necessary, add additional hot water during the cooking process.
Next, uncover the pot and stir in the tomatoes with their juices, the chili powder, cumin, black pepper, oregano and cilantro.
Simmer, uncovered over medium heat, stirring occasionally, for about 30 minutes or until the beans are completely tender and the broth has thickened slightly. Season with salt to taste. Serve garnished with additional cilantro and jalapeno (optional).