whenのまとまりがあるときは、現在の時制だけは取れないんです。when〜はいまではない過去か未来のときを表すのに使う表現だからです。
現在完了は、細かいことを省きますが、現在・過去・未来のどれかと言われれば現在なのです。完了のニュアンスを持ってはいるけど現在時制の表現の仲間だということです。だからwhenのまとまりとは一緒にできないです。
過去完了は同じように端的に言うと過去時制で使う表現の仲間なので、when〜のまとまりと一緒に使うことができるんです。
未来完了も同じ理由からwhen〜のまとまりと一緒に使うことができます。
突っ込まれる前に補足しておきます。
when〜は過去形で使えば「過去の一時点」を表す。
でも例えば「〜ago(〜前)」のように過去の一時点を表す表現は、過去形でしか使えなくて過去完了形はダメだって習ったおかしいじゃないか。
↑こういう指摘があると思います。
それはその通りで、過去の一時点を表す「句」は過去完了とは使えなくて、過去形でのみ使えます。
ポイントはwhen〜のまとまりがSVを含んだ「節」の形だというところです。
when SV〜のまとまりが過去の一時点を表すとき、当然このVは過去形になりますね。そして、それと過去完了がセットで使われると、自然に「時制差」つまり二つの物事がおきた順序を表すことができますよね。
過去完了の部分が先に起こって(いわゆる大過去)、whenのまとまりの過去形の方がそれに続く、という形です。
このように、過去完了は過去の一時点をあらわす「節」と一緒に使って、物事の順序を明らかにするのです。
未来完了なら未来の一時点を表す節と一緒に使う、これも同じ効果があります。
ちなみに、過去完了にしなくても、話の流れ上順序が明らかな場合は、過去形で書く場合もあります。