Roast the poblano over an open flame or 4 inches below a broiler, turning regularly until blistered and blackened all over, about 5 minutes for an open flame, about 10 minutes for the broiler.
Heat the oil in a medium (3-quart) saucepan over medium. Add the onion and garlic, and cook until almost golden, about 6 minutes. Add the garlic and cook 1 minute more. Scoop up the onion and garlic with a slotted spoon, pressing them against the side of the pan to leave behind as much oil as possible, and transfer to a food processor or blender; set the pan aside. Add the corn, cornstarch and 1 ½ cups of the milk. Process to a smooth puree.
Return the pan to medium heat. Set a medium-mesh strainer over the pan and work the pureed corn mixture through it. (You can skip the straining if you like the somewhat coarse texture the skins of the corn kernels will give the soup.) Whisk frequently as the soup comes to a simmer.
When the chile is handleable, rub the blackened skin off. Pull out the stem and seed pod. Rinse the chile flesh to remove bits of skin and seeds. Cut into ¼-inch pieces.
Stir the chile pieces into soup, along with the chicken or ham and remaining 2 ½ cups of the milk. Simmer until the chicken is cooked (or the already cooked chicken or ham is hot), 4 to 5 minutes. Taste and season with salt, usually about 1 ½ teaspoons. Serve hearty portions with a sprinkling of cilantro.