Acredito que você esteja confundindo o PowerShell, porque você envia uma matriz de ACLs pelo pipeline, mas não itera cada uma delas. Além disso, o CMDlet Set-ACL espera que um caminho seja enviado pelo pipeline, pensa.
$acl= Get-Acl .\reference_file
$acl= $ACL.SetOwner([System.Security.Principal.NTAccount]$my_account)
Get-ChildItem | ? { (Get-ACL $_).accesstostring -notlike "*domain\groupname*"} | % { Set-ACL $_.Fullname $acl }
Isso funciona para mim. Ele obtém todos os arquivos ou pastas, verifica se a ACL corresponde à sua expressão e define a ACL, se necessário.