Les deux me semblent quasiment synonymes.
Avec une boucle, la métaphore est celle d'un cercle sur lequel sont placées des instructions et qui, comme tout cercle qui se respecte, n'a pas de fin. Au bout d'un "tour" dans ce cercle, on recommence à exécuter la même suite d'instructions. Une boucle représente cette structure fermée, ce cercle... vicieux. Boucler signifie parcourir cette boucle indéfiniment.
Quant on parle d'itérer, on est toujours dans le contexte d'une boucle mais on lui ajoute souvent un deuxième concept, celui d'itérateur. Un itérateur peut être une variable que l'on va incrémenter à chaque tour (chaque itération), des élément extraits en séquence d'un tableau et utilisés l'un après l'autre lors de chaque itération de la boucle, ou tout autre objet qui va donner au code de la boucle quelque chose de différent à traiter à chaque fois. C'est typiquement le cas d'une boucle "for".
Avec une boucle while, on n'a pas d'itérateur, simplement un condition de maintien dans la boucle.
Il se trouve qu'on généralise souvent aussi le sens du mot itération pour décrire uniquement l'exécution unitaire du code contenu dans la boucle, indépendamment de la présence ou non d'un itérateur ou d'un test de sortie, le verbe itérer signifie alors répéter un nombre indéfini de fois les itérations.
Dans ce cas, boucler et itérer peuvent être vus comme synonymes.
Le seul cas où l'on pourrait avoir une boucle mais difficilement considérer que quoi que ce soit soit itéré, c'est celui d'une boucle vide, par exemple en C, C++, Java, Javascript, etc. :
for(;;);
voire en BASIC:
10 GOTO 10
à ne pas confondre avec la récursion, beaucoup plus périlleuse :
10 GOSUB 10