I finally dived into the whole BP compile process and find out why my pointers are set to null.
As of today when a BP compile is triggered, for each instances of my actor in the editor a new instance is created based on the CDO. After that only pointers that are present in CDO are updated using the old instance (it use the name of the object). All others pointers init outside of the construtor are set to null as they are not present in the CDO.
The copy process is done in unrealEngine.cpp within the function
void UEngine::CopyPropertiesForUnrelatedObjects(UObject* OldObject, UObject* NewObject, FCopyPropertiesForUnrelatedObjectsParams Params).
For those interested pay attention here
if (!ReferenceReplacementMap.Contains(ObjectInOuter)
&& (!Params.bDontClearReferenceIfNewerClassExists || !ObjectInOuter->GetClass()->HasAnyClassFlags(CLASS_NewerVersionExists)))
{
ReferenceReplacementMap.Add(ObjectInOuter, nullptr);
}
here is exactly where all references that are not initially present in the CDO are set to null. And those present in the CDO will be refreshed based on the old instance of the Actor.