From comparing behavior between JBossWS Metro 3.0.1 and 3.0.2, I think I've identified the problem.
When JBossWS Metro deploys a Web Service, it saves a copy of the original web.xml file in a file named "web.xml.org", then modifies the web.xml and adds some JBossWS-specific entries. It also creates a sun-jaxws.xml file in the server's "tmp/jbossws" directory.
In JBossWS Metro 3.0.1, when the container is undeploying a Web service, it deletes the modified web.xml file and then restores the original web.xml file by renaming the "web.xml.org" file to "web.xml". It also deletes the sun-jaxws.xml file in the tmp directory.
However, in JBossWS Metro 3.0.2, the modified web.xml is not deleted, and the "web.xml.org" file is not renamed back to "web.xml". (It does delete the sun-jaxws.xml file from the tmp directory). This causes the Web service to be deployed as a regular servlet on subsequent server starts.
In order to get the service to deploy again as a Web service endpoint, one must manually go into the war directory and delete the "web.xml" file, then rename the "web.xml.org" file back to "web.xml" before starting the server.
The associated issue is JBWS-2243. The fix will be available with next JBossWS 3.0.3 release, but it will be applicable to JBoss AS 4.2.3 or above.