Preheat the broiler. Bring a large pot of water to a boil, salt it, add the pasta and cook until al dente, 10 to 12 minutes. Drain and return to the pot.
While the pasta is working, in a medium saucepan, melt the butter over medium heat. Add the garlic and cook for 1 minute. Whisk in the flour and cook for 1 minute. Whisk in the milk and stock and simmer until it coats the back of a spoon thickly, about 5 minutes. Stir in the corn, chiles, bell pepper and chili powder; season with salt and pepper. Bring to a simmer and stir in 2 cups cheese. Remove from the heat.
Add the sauce to the pasta and toss. Place in a large casserole dish and top with the remaining 1/2 cup cheese. Place under the broiler to brown the top, about 2 minutes. Top with the cilantro, if using.