Luego de algunos pasos, te quedaría:
var valid = IsCN(listaDN) && (IsTargetGroupVPN(listaDN, prefix) || isTargetGroupComunicados(listaDN, prefix) || isTargetGroupCampañas(listaDN, prefix));
Que a su vez podrías extraer como método. En ese caso y haciendo mucha futurología, quizás te queda algo así:
groupsAD.ForEach(g => {
if (Valid(adManager.GetDistinguishedNameItems(g.DistinguishedName), prefix))
target.Add(g.Name);
});
No conozco el dominio para sugerir nombres, pero me suena que Valid() podría tener un mejor nombre.
Si llegás a ese punto, quizás podrías reemplazar el ForEach por una operación de filtro, por ejemplo
target = groupsAD.Where(g => Valid(adManager.GetDistinguishedNameItems(g.DistinguishedName), prefix));
Es difícil avanzar mucho en un refactoring sin ver como va quedando el código y sin tener datos de contexto (por ejemplo, de que estructura mayor forma parte este bloque de código) y, sobre todo, sin tener el feedback del entorno de desarrollo y de la ejecución de las pruebas.
El resultado de los pasos que mencioné, sería, más o menos (buscaría un mejor nombre para el método Valid()):
groupsAD.Where(g => Valid(adManager.GetDistinguishedNameItems(g.DistinguishedName),
adManager.EnvironmentPrefix )).ForEach(grupo =>
{
adManager.DeleteUserFromGroup(username, grupo);
});
Un saludo