Typically, when RDP works with a public IP but fails with the private IP, it means the VM itself is fine and the problem is in the network path. There are only a few things that block private-IP RDP in Azure.
The first thing to check is whether the machine you are connecting from actually has a route to that private IP. You must be on the same VNet, a peered VNet, connected over VPN, or connected through ExpressRoute. If none of those are true, private-IP RDP will never work.
Second, check the NSG on both the subnet and the VM NIC. You need an inbound rule allowing TCP 3389 from your source network. Many people only check the subnet NSG and forget the NIC NSG is also blocking it.
Third, if you are using Azure Firewall or a custom NVA, make sure they allow RDP and that the route table for the VM points to the correct next hop. A wrong UDR (for example pointing 0.0.0.0/0 at a firewall that does not allow RDP) will block private-IP access immediately.
So the quick steps are:
Make sure your client can actually reach the VM’s private IP (same VNet, VPN, or peering).
Check the NIC NSG and subnet NSG and make sure 3389 inbound is allowed from your network.
Check the route table for the VM if you are using Azure Firewall or UDRs.
Once RDP works privately, remove the public IP.
This is always a network path issue, not a VM issue. If you check those three things, you will find the blocker.