The problem we're having is the default IIS error page renders even though customErrors = "on" and the 404 error is specified (default able web.config).
I traced it down to the /Errors/PageNotFound.aspx.cs file. The page is forcing the Response.Status to '404 Not Found'. Which, on my old hosting platform, worked just dandy.
But the new platform doesn't like it. When Response.Status is forced to 404, the default IIS 404 page renders and not the custom error page found in the site.
I did some googling and found that an additional web.config setting is necessary. This goes in the <system.webServer> section:
When that setting is present in the web.config, the site correctly renders the custom error page specified in the web.config.<httpErrors existingResponse="PassThrough" />
As for why this is necessary, that part I don't understand. The hosting move involved going from Server 2008 to Server 2012, so that could be part of it. Or there could be some sort of default application.config setting on the new platform that didn't exist on the old hosting platform. Very puzzling, but at least I found a solution. I'm posting it here in case anyone else runs into the same problem where IIS renders a default error page even though custom error pages are specified in the web.config.