Faits:
A. A la suite de l'arrêt de renvoi du Tribunal fédéral des assurances du 24 octobre 2005 dans la cause opposant l'Office de l'assurance-invalidité pour le canton de Vaud à B._ (I 460/04), ledit office a mis l'assuré au bénéfice d'une demi-rente d'invalidité pour la période du 1er octobre 2000 au 31 janvier 2003, puis d'une rente entière du 1er février au 31 août 2003, assorties de rentes complémentaires, par décision du 22 juin 2007.
B. B._ a déféré cette décision au Tribunal des assurances du canton de Vaud (aujourd'hui : Tribunal cantonal, Cour des assurances sociales) en concluant à son annulation et au versement d'une rente entière à compter du 1er octobre 2000.
Par jugement du 17 juin 2008, la juridiction cantonale a rejeté le recours. Elle a également réformé d'office la décision attaquée en ce sens que le droit de l'assuré à une rente a été nié, faute d'atteinte à la santé invalidante.
C. B._ interjette un recours en matière de droit public contre ce jugement dont il demande la réforme, avec suite de frais et dépens, en concluant principalement à l'octroi d'une rente entière d'invalidité à partir du 1er octobre 2000, subsidiairement à l'annulation de la décision administrative du 22 juin 2007 et au renvoi de la cause à l'office AI pour instruction complémentaire et nouvelle décision. Il sollicite le bénéfice de l'assistance judiciaire.
L'intimé conclut au rejet du recours, tandis que le tribunal cantonal et l'Office fédéral des assurances sociales ont renoncé à se déterminer.

Considérant en droit:
1. Le recourant se prévaut d'une violation de son droit d'être entendu, alléguant que le tribunal cantonal a omis de lui donner l'occasion de se prononcer sur une éventuelle réforme de la décision attaquée à son détriment. Il invoque à cet égard l'art. 48 de la loi vaudoise sur le Tribunal des assurances (abrogée au 1er janvier 2009).
2. Dans la mesure où le recourant soulève un grief d'ordre formel contre le déroulement de la procédure de première instance, celui-ci doit être examiné en premier lieu, car il se pourrait que le tribunal accueille le recours sur ce point et renvoie la cause à l'autorité cantonale sans examen du litige au fond (<ref-ruling> consid. 2 p. 92 et la référence).
3. Le point de savoir si les conditions formelles d'une reformatio in peius ont été respectées doit être examiné d'office au regard de l'art. 61 let. d LPGA (<ref-law>). Aux termes de cette disposition légale, le tribunal cantonal des assurances n'est pas lié par les conclusions des parties; il peut réformer, au détriment du recourant, la décision attaquée ou accorder plus que le recourant n'avait demandé; il doit cependant donner aux parties l'occasion de se prononcer ou de retirer le recours. La règle cantonale que le recourant invoque (art. 48 LTAs) correspond à l'art. 61 let. d LPGA.
Le grief soulevé est bien fondé. A l'examen du dossier cantonal, on constate que le tribunal des assurances n'a pas averti le recourant de son intention de réformer la décision attaquée à son détriment, pas plus qu'il ne lui a offert la possibilité de se déterminer sur ce point ou de retirer son recours. Pour ce seul motif et sans examen du fond, le jugement attaqué sera annulé et la cause renvoyée à la juridiction cantonale afin qu'elle respecte la procédure prévue par l'art. 61 let. d LPGA.
4. L'intimé a conclu au rejet du recours en soutenant que le jugement attaqué a été rendu en conformité avec les dispositions légales et la jurisprudence. Succombant, il supportera les frais judiciaires (<ref-law>).
Pour le même motif, il est redevable d'une indemnité de dépens au recourant (<ref-law>), dont la demande d'assistance judiciaire devient ainsi sans objet.

Par ces motifs, le Tribunal fédéral prononce:
1. Le recours est admis. Le jugement du Tribunal des assurances du canton de Vaud du 17 juin 2008 est annulé, la cause étant renvoyée au Tribunal cantonal du canton de Vaud, Cour des assurances sociales, afin qu'il procède conformément au consid. 3.
2. Les frais judiciaires, arrêtés à 500 fr., sont mis à la charge de l'intimé.
3. L'intimé versera au recourant la somme de 2'800 fr. (y compris la taxe à la valeur ajoutée) à titre de dépens pour la procédure fédérale.
4. Le présent arrêt est communiqué aux parties, au Tribunal cantonal du canton de Vaud, Cour des assurances sociales, et à l'Office fédéral des assurances sociales.
Lucerne, le 9 juin 2009
Au nom de la IIe Cour de droit social
du Tribunal fédéral suisse
Le Président: Le Greffier:
Meyer Berthoud