Sorry it took me so long to try it myself. First I was busy, then I forgot, then I was busy again. 
It only took a few minutes so here are my results (using a custom UE 4.11.0 build).
This is my Actor class:
//.h
#pragma once
#include "GameFramework/Actor.h"
#include "InstancedTestActor.generated.h"
UCLASS()
class SOME_API AInstancedTestActor : public AActor
{
GENERATED_UCLASS_BODY()
public:
UPROPERTY(Instanced, EditAnywhere, Category = "Instanced", BlueprintReadOnly)
TArray<class UActorComponent*> InstancedComponents;
};
//.cpp
#include "Some.h"
#include "InstancedTestActor.h"
AInstancedTestActor::AInstancedTestActor(FObjectInitializer const & ObjectInitializer)
: Super(ObjectInitializer)
{
InstancedComponents.Empty();
}
Placing an instance of this class into a level, adding a StaticMeshComponent (derived from UPrimitiveComponent) and a GameplayTasksComponent (derived from UActorComponent) to the InstancedComponents array, then saving the level, closing the editor and reopening it worked. Both components were saved and loaded correctly.
If I now create a Blueprint subclass from this actor class and add the same kinds of components in its defaultproperties it still works as expected even after restarting the editor and reloading the level.