@James ,
Can you try running below command (It will try to reconcile the cluster to last known good state)
az resource update -n aksclustername -g aksresourcegroup --namespace Microsoft.ContainerService --resource-type ManagedClusters
Once you run that command, cluster will go to updating state - wait for couple of mins to see if it can turn to healthy state.
FYI - To see why the cluster was stuck in RefreshServicePrinciplaProfile , try running kubectl get events --all-namespaces .