Following PS script should help:
#Get site object and specify name of the library to look for in each site
$site = Get-SPSite http://portal
$lookForList = "ABC"
#Walk through each site and change content types on the list specified
$siteA = $site.OpenWeb("http://portal/sites/A")
write-host "Checking site:" $siteA.Title
#Make sure content types are allowed on the list specified
$docLibrary = $siteA.Lists[$lookForList]
if ($docLibrary -ne $null)
{
$docLibrary.ContentTypesEnabled = $true
$docLibrary.Update()
#Add site content types to the list
$ctToAdd = $siteA.ContentTypes["XYZ"]
$ct = $docLibrary.ContentTypes.Add($ctToAdd)
write-host "Content type" $ct.Name "added to list" $docLibrary.Title
$docLibrary.Update()
}
else
{
write-host "The list" $lookForList "does not exist in site" $siteA.Title
}
#Dispose of the site object
$site.Dispose()
But you should check the error you get when you navigate to Add from existing content type.. Get the correlation and check the exact error in ULS logs