I think this is expected. If you try to create a second worker within the same process (deployment) from same WorkerFactory that listens on the same task queue, SDK is going to return the existing one and not create second, see here. In your case I believe an existing worker is returned which already had the workflow impl registered, and the exception imo makes sense.
With Temporal to achieve high availability /scaling on your app side you should deploy multiple worker processes so in case one goes down your workflow executions can continue on another worker in different process (so you can deploy your app that contains workers on multiple pods/containers).