Place beans in a large pot and cover with enough water to cover by 2 inches (2.5 cm), and allow to soak overnight. Drain beans and cover again with fresh water. Bring to boil, reduce heat, and simmer for 2 hours.
Heat the corn oil in a stockpot or other very large pot over medium-high heat. Add the onions and sauté until tender, about 3 minutes. Add garlic, chipotle and ancho chiles, cumin, paprika, oregano, salt, cayenne, and vinegar, and sauté for 5 to 10 minutes.
Add tomatoes, tomato puree, and the water. Bring to a boil, then reduce heat and simmer for 10 minutes. Add the beans with their juice. Simmer for 1 hour. Serve with or without sour cream.