I have a heavily modified WebService DataAccessLayer but I think this bug is present in the base code.
In the custom methods section of WsEntityProviderbase.generated.cst returnType is filled by GetReturnCustomProcReturnType which returns a value like:
TList<ContentObject> (for custom stored procs that return TLists)
which is then compared to collectionClassName which holds a value like
MyCompany.Business.TList<ContentObject>
Needless to say, these aren't equal and consequently end up making the webservice raise an unsupported exception.
Changing collectionClassName to GetCollectionClassName(SourceTable.Name) for the comparison solves this issue.
Not sure when this changed, just noticed it happening and I haven't got a recent SVN pull lately (couple of months)