so to be clear, I have absolutely zero context on what this migration is or who you worked with or anything.
But sure, it's possible that when the migration was done, they imported cards from another payment processor as card_xxxx objects and then set those card_xxxs as the default_source on subscriptions. That is the legacy way to do things.
The way it works is that a subscription has a default_source and an invoice_settings[default_payment_method]. You can only set legacy card objects in the former. In the latter, you can set either a legacy card object or a current PaymentMethod pm_xxx, they both work.
When we try to charge a subscription, we look first at invoice_settings[default_payment_method] , if that's set, we charge that, and we only look at default_source if that's not set.