その名の通り、GetLastError は Win32 の error を拾う API なわけですけど、Win32 API は大抵の場合 error が発生したか?を戻り値で返します。で、戻り値と GetLastError と両方どちらでも判断できそうなものですが、必ず戻り値で判断しないといけないことになってます。
However, some functions also set the last-error code when they succeed. If the function is not documented to set the last-error code, the value returned by this function is simply the most recent last-error code to have been set; some functions set the last-error code to 0 on success and others do not.
つまり、成功した場合に last-error を設定するものもあるので last-error を確認するのは戻り値を確認してから行うべきということになります。
なんでこんな変な仕様にしたんだろ。
ちなみに全然更新されていない日本語訳はここら辺がずっぽし抜けています。もしかすると昔はなっかったのかも?しかも、やばい訳になっているので要注意です。