Post type Permalink

The slug of a CPT can not be dynamic (actually no slug can be) as wordpress needs to know how to parse the URL very early in the handling of the request. You can probably change the behaviour, but you will only end with the same results that slugs have to be constant even when you implement your own parsing.

This is why your remove_cpt_slug generates the url you expect but wordpress fails to handle it correctly.