Since QGIS version 3.16, you can use the expression
overlay_nearest to find the nearest neigbouring point. With the help of this, you can build an expression that compares the names of the current feature with the name of it's next neighbour and if they are the same, highlight it. Edit: As requested in one comment, a detailed explanation how this expression works / is built can be found at the bottom of this solution.
That's what I did in the screenshot below, highlighting the points that have the same name as their nearest neighbour with a blue circle. I added a symbol layer of the type geometry generator, geometry style: point and added this expression:
overlay_nearest( @layer, $id)
'name' ) ,
You can use the same expression to create a new field in the attribute table using field calculator. Just replace the antepenultimate and penultimate lines - instead of
to get true in case of the features highlighted on the screenshot and false for the others.
On this screenshot you see the two QGIS and OpenSource names highlighted with blue dots, but not the other two instances of these names (red rectangles) further away because their nearest neighbour has another name:
Edit: Explanation of the expression.
The step-by-step reconstruction starts on line 7. In fact, writing complex expressions, you start somewhere and than use this output as input of a next function and so on. Thus you get a nested hierachy of functions (visually structured by indents, but unlike using Python, with QGIS expressions indents are not mandatory, they have a visual function), where the "beginning" part is somewhere "inside" the complex function. But logically, it starts from there and you could try to reproduce each step separately in the expression editor.
overlay_nearest( @layer, $id) gets the nearest item on the same layer (
@layer) the expression is applied on and returns the id (
$id) of this item.
As the function in step 1 returns an array, you must convert it (get one of the items in the array) to be able to use this further. The array contains only one item (the id of the nearest feature), thus get the first element of the array:
array_first () -
 is the expression from step 1
We have the id of the nearest feature (line), now we need to get the feature itself: it is on the current layer (
@layer), thus we use this expression:
get_feature_by_id (@layer, ) -
 is the expression from step 2, thus the id-value we calculated in steps 1 and 2.
Now, from the feature of step 3 , we want to get the value of it's attribute
name, thus we use this expression:
attribute ( , 'name' ), where  is the expression from step 3 (= the nearest feature from our current feature).
Now we use an if-clause, referring to the value contained in the field name of the current feature - we refer to a field using double quotes, thus
"name". If this name of the current feature is equal to the value of the name of the nearest feature (what we calculated in step 4), than QGIS should plot the actual geometry (
$geometry), otherwise nothing (empty with two single quotes:
''), all together:
if ( "name" = , $geometry, '' ). And here you are with the expression from above.