This is probably a very late reply to your question but I’ve just stumbled upon your thread and I think that I may have a work-around for your question. Currently, as Hadriscus had pointed out, it isn’t possible (yet) to set the positions of all the points on a particular mesh to different positions that you want (in this case, central face position). However, by there’s still a work-around for this.
Here is an explanation of how you can achieve it.
First of all, it’s essential that you need to use the “Edge Split” node so that for every face that’s there on your mesh, it gets 4 separated and unique points.
By doing so, now you can transfer these points’ coordinates (points’ position) from the “Vertex Domain” to the “Face Domain” and store it there. The coordinates of these points, when being stored moved from one domain to the other (in this case, "Vertex → “Face”) will be averaged out automatically and you’ll be able to get the central positions of these faces on your mesh.
Now, you can mix the points’ original positions to your new central position and it’ll move all of the points to that central position. However, if you choose to do so, the problem that remains is that you’re left with 4 points overlap on each other, which is very annoying and in most cases, unusable.
To fix this, we need to find a way to get rid of the other 3 points and keep one. This is rather simple, by using the index numbers (combine with a “Modulo” math node) and storing it inside your “Face Corner” domain, you can get the index position for each of the points that’s on your face and then use a “Float Compare” to eliminate the points that you don’t need.
Here’s the screenshot of the full node graph.
You can use these points to instance whatever you want.