@shiva patpi - Thanks for your response and for sharing appropriate links.
In my use case, I figured it out and the issue was provisioner "kubernetes.io/azure-disk". Velero backup/restore is not working if the storage class provisioner is "kubernetes.io/azure-disk". I deployed the same app with storage class provisioner " disk.csi.azure.com" and velero restoration worked in the Multi-Zone cluster.
On High-Level:
If the storage class provisioner is "disk.csi.azure.com", then backed up PVC with No AZ cluster and restoration of that PVC on Multi-AZ cluster with ZRS worked for me.
If the storage class provisioner is "kubernetes.io/azure-disk", then backed up PVC with No AZ cluster and restoration of that PVC on Multi-AZ cluster with ZRS didn't work. As I believe, CSI driver is meant for this operation.
Now the major concern is, that Microsoft's recommendation is to migrate in-tree storage classes(kubernetes.io/azure-disk) to CSI.
https://learn.microsoft.com/en-us/azure/aks/csi-storage-drivers
Migrating these storage classes involves deleting the existing ones, and re-creating them with the provisioner set to disk.csi.azure.com if using Azure Disks, and files.csi.azure.com if using Azure Files.
Already my PVCs are holding data if I delete and recreate a new storage class and point a new storage class in the running app. It will create a new/empty PVC with this provisioner "disk.csi.azure.com". But my application needs old PVC data, not new PVC. How can we mitigate this? Is there a workaround?
Appreciate suggestions/Inputs.