How to show labels exactly around a circle in QGIS?
In brief
You should split each circle in 2 halves, then convert them to polyline (or any mean to mimic the top and bottom halves perimeters). The main thing is to have at the end a layer with the top perimeter and the bottom perimeter.
Then you label the top one with a curve labeling with a top setting and label the bottom one with a bottom labeling.
Below the How-to-do with screen shots
The table of your entities should look like this (it's a test example, it's going to be different with your data). I created a position field and a label field here.
In the case where you keep one physical layer, you duplicate your layer and set the filter to match 'UP' for a copy of the layer and 'DOWN' for the other (tip : when somebody will have set this property in the data defined field this will be simpler)
It should look like this in the properties :
For each, you set up different labeling properties
Below layer
Upper layer
then you get :