Step 1 Put the beans in a heavy pot and add the water, one-half of the diced onion, 2 gloves of minced garlic and 1 teaspoon salt. Bring to a rapid simmer, cover and reduce the heat. Cook until the beans are tender, 1 1/2 to 2 hours, checking frequently to avoid overcooking. Time will vary depending on the type of beans, their age and how low the heat is. (Recipe can be prepared to this point and refrigerated.)
Step 2 Heat the oil in a heavy skillet over medium heat. Add the beef and cook it, stirring only occasionally, until it browns, about 5 minutes. Add the bacon and cook it until it renders its fat and begins to brown, about 5 more minutes.
Step 3Pour off all but about 2 tablespoons of the fat, add the remaining onion and cook until it softens, about 3 minutes. Add the remaining garlic and as soon as it is fragrant stir in the chipotle. Add the tomato puree and cook until the mixture darkens and thickens to a stiff paste, about 5 minutes. Stir in the oregano, sage, pepper to taste, cumin seeds, vinegar and sugar and cook about 5 minutes.
Step 4Stir the meat mixture into the beans, replace the cover and cook until the beef is tender, the broth has thickened and the flavors have melded, about 1 hour. Season to taste with salt and pepper.