object.Instantiate() copying instances of prefabs rather than the prefabs themselves

If I have a script on a prefab which Instantiates that same prefab (by setting the scripts 'prefabToInstantiate' variable to the same prefab that the script is on by drag-and-dropping in the editor, in case that matters), then when that scipt is called from an instance of the prefab, it doesn't create a copy of the prefab as I would expect. Rather, it creates a copy of the prefab INSTANCE from which the script was run. (and before you ask, no, my code isn't telling using the object it's attached to as the argument for Instantiate).

Here's a claryfiying example: I have a prefab called FaceCube, a cube with a face on it. It has a script, FaceCubeScript. The script has a variable, prefabToInstantiate. The script is set to instantiate prefabToInstantiate and move the new instance to a little above the object the script is attached to when the mouse is clicked on that object. In the unity editor I then drag the FaceCube prefab onto the prefabToInstantiate variable in the FaceCube prefab. Then, I create an instance of the prefab, and set its material to different one from the prefab's material. (making sure afterwards that the matertial of the prefab and the material of its instance are, indeed, different). I run the game and the click on the object, and the new FaceCube instance that's create has the material of the instance I clicked on, not the prefab's material.

So...why does that happen? This isn't actually a terribly urgent problem - it only came up in a script that I wrote to test another script. But I feel it's in my insterest to understand how the Instantiate function works as fully as I can, so any answers will be very much appreciated.

This issue has come up a few times in the past. Here's a few threads that touch on what I believe is the same issue:

Thread 1

Thread 2

Thread 3

Apparently this is 'expected behavior', but is seems more like a bug to me :) (Just my opinion though!) In any case, I've run into this problem as well. In my case, I solved it by creating two otherwise identical prefabs that instantiated each other, rather than simply having one prefab that instantiated itself. It's a workaround, but it does solve the problem.