Make the salsa: Heat a 12" cast-iron skillet over medium heat. Add garlic, tomatoes, and serrano chile and cook, turning occasionally, until charred all over. Transfer vegetables to a plate and let cool. Peel the garlic and stem and seed the serrano chile. Transfer vegetables and 2 tbsp. water to a small food processor and process into a chunky purée; set aside. Return skillet to medium-high heat. Add guajillo chiles and cook, flipping once, until toasted, 2 minutes. Transfer chiles to a bowl and cover with 2 cups hot water; let sit for 20 minutes to soften. Peel, stem, and seed chiles and purée; in food processor with tomato mixture. Add 1 tbsp. cilantro. Season salsa with salt and sugar, transfer to a bowl, cover, and set aside.
Make the tacos: Put beans into a small pot and heat over medium heat until hot; cover, remove from heat, and keep warm. Heat a 12" skillet over medium-high heat. Working in batches, add tortillas and toast, turning occasionally, until soft, about 3 minutes. Stack tortillas on a sheet of aluminum foil and cover to keep warm. Pour oil into a 5-qt. pot to a depth of 2" and heat over medium-high heat until a deep-fry thermometer reads 350º. Meanwhile, season fish with salt and chili powder and dredge in flour, shaking off excess. Working in batches, add fish to the oil and cook, turning occasionally, until golden brown. Using a slotted spoon, transfer fish to a rack set in a baking sheet. To serve, use 2 tortillas per taco. Divide beans among tacos; top beans with fish, avocado, the remaining cilantro, a squeeze of lime juice, a dollop of sour cream, and a tablespoon of salsa. Serve warm.