Gut, Delphi scheint das Interface die Variable, vor Übergabe an den OUT-Parameter, freizugeben.
Ja, so muss es ja sein, es ist ja schließlich ein out-Parameter, das heißt der Aufruf entspricht einer Neuzuweisung. Also muss das alte Objekt natürlich vorher freigegeben werden.
Wenn du einen Interface-Parameter als out deklarierst, wird vor dem Aufruf der Methode ein IntfClear gemacht. Damit wird ein eventuell vorher in dem Parameter gespeichertes Interface freigegeben. Das erfolgt im der aufgerufenen Methode übergeordneten Kontext. Damit ist der out-Pramater innerhalb der Methode bereits mit nil vorbelegt, wie es auch für lokale Interface-Variablen gilt.
Ich kann da ebensowenig ein Fehlverhalten des Compilers erkennen.