It seems you never bind the OnActorBeginOverlap function to the event and you don’t tell BoxComponent to generate the events. Add this to the end of the AZone constructor:
BoxComponent->SetGenerateOverlapEvents(true);
OnActorBeginOverlap.AddDynamic(this, &AZone::OnActorBeginOverlap);
Hope this helps