Ok, I still don’t fully understand what’s going on, but I have a working solution.
Before modifying the binding asset, set “Editor.AsyncSkinnedAssetCompilation 2” (it defaults to 1) and then set the proper source and taget meshes in the binding asset. Set Editor.AsyncSkinnedAssetCompilation back to 1 right after modifying the binding asset.
I also encountered another problem that even if your source and target meshes seem to be set properly, the groom isn’t fitting properly to the target mesh. I don’t really understand this issue either but it seems like the groom asset itself gets “corrupted”, even when setting new binding asset with proper source/target meshes. So the best solution is to delete the groom asset and reimport it, or if it is a metahuman groom, get the same groom from a diferent metahuman, or delete and reimport the metahuman from quixel bridge. Simply duplicating the groom asset inside unreal to get a “new” asset wasn’t working for me.