Thanks for that callout… I think I see the confusion.
What you are seeing is the cascade of Unity initialization in a running scene.
YES you unchecked enabled.
But when the scene is loaded and .AddComponent() is called on your behalf, new script instances are enabled and there is no way to change this… UNLESS the GameObject is disabled.
Now… long after AddComponent() has happened and Awake() has been called… Unity deserializes the state of that script, all the public serializables, such as .enabled
Now it looks disabled… and yet Awake fired.
I retract my troll observation above. 
More broadly…
Serialized / public fields in Unity are initialized as a cascade of possible values, each subsequent value (if present) overwriting the previous value:
-
what the class constructor makes (either default(T) or else field initializers, eg “what’s in your code”)
-
what may be saved with the prefab
-
what may be saved with the prefab override(s)/variant(s)
-
what may be saved in the scene and not applied to the prefab
-
what may be changed in the scene and not yet saved to disk
-
what may be changed in OnEnable(), Awake(), Start(), or even later
Make sure you only initialize things at ONE of the above levels, or if necessary, at levels that you specifically understand in your use case. Otherwise errors will seem very mysterious.
Here’s the official discussion: https://blog.unity.com/technology/serialization-in-unity
If you must initialize fields, then do so in the void Reset() method, which ONLY runs in the UnityEditor.
Field initializers versus using Reset() function and Unity serialization:
https://discussions.unity.com/t/829681/2
https://discussions.unity.com/t/846251/8
To avoid complexity in your prefabs / scenes, I recommend NEVER using the FormerlySerializedAsAttribute