Make sure the principle you select on the Access policies of the Key vault is same as that when you create the Service connection on Azure DevOps. Make sure the name and the ID are same.
If there are two or more principles have the similar or almost same names, you might confuse them. This may cause that when you set Access policies of the Key vault, you select a principle, but another one when you create the Service connection on Azure DevOps.
On Azure Portal, you can navigate to Azure Active Directory > App registrations, check if there are some principles with the same prefix but different suffixes in the their names.
For example:

In this page, find and click the principle you want to use, copy its "Application (client) ID
".
Then go to the Access policies of the Key vault, when adding principle, search the principle you want to use via its "Application (client) ID
" you have copied.
When creating the Service connection on Azure DevOps, paste the "Application (client) ID
" you have copied above into the Service Principal Id
field.
In this way, it can make sure the principle is consistent.
[UPDATE]
Please try like as the steps below:
On your local machine's PowerShell, follow the article "Create an Azure service principal with Azure PowerShell" to create a service principal in a specified Tenant on your portal.
On Azure Portal, find the service principal you created above, copy its Application (client) ID
and Client secrets
(if no, create one).
Go to set the Access policies of the Key vault, search and add the service principle you created above via its Application (client) ID
, and make sure you have granted it the "Get & List" permissions.
On Azure DevOps, create an Azure Resource Manager service connection and select the "Service principal (manual)
" method. Make sure the Service Principal Id
is same as the Application (client) ID
of the service principal you created above, and the Service principal key
is existing on this service principal.
