I'm sorry I never provided feedback. I had some time today to look at this again and have determined the root cause.
If you enable "application" scope for your service, Axis2 caches the serviceGroupContext in the configurationContext so there is only one instance per service. The serviceContext is associated with the serviceGroupContext and contains the actual service implementation class.
The problem comes into play when the serviceGroup is removed from the system. Well, you think it is removed since the service is not longer callable. However, the serviceGroupContext and therefore the serviceContext are still assoicated with the system's configurationContext. Therefere, if someone comes along and creates a new serviceGroup by the same name, the same "old" serviceGroupContext and serviceContext will be used... and therefore, the old service implemenation class will try to be used with the new service... this causes big problems.
The only remedy is to restart Axis2 and/or the application server.
The fix for this problem is to remove the serviceGroupContext from the configurationContext when the serviceGroup is deleted. This can be done by updating the ApplicationSessionServiceGroupContexts map.