Ok I've got a little further with this.
The problem is that I'm trying to override a seam-ui.jar component (which lives in the WAR lib dir). Those classes are not in the classpath of the default jar located in the EAR. I was getting away with it due to seam hot deploy dev dir.
I guess the seam deployer was skipping my class as the base class was not in the classpath.
So my question is now how should I define these WAR seam components?
Copy them into the WEB-INF/classes dir and include a seam.properties there ? Create a new jar in the WEB-INF lib dir ?
I got this working by deploying those particular classes to WEB-INF/classes and adding a seam.properties there.
So, if you want to override a component from seam-ui.jar you need to make sure it gets packaged in the war.
It would have been nice to get a class not found when the application started up ... would have saved some time !
Unless you put a seam.properties in the root of the archive/classpath you want scanning, Seam won't even look at the archive for classes - so it don't get as far as throwing a CNFE. This is an optimisation for startup so that Seam doesn't have to scan every archive in the app server!