I am not familiar with the metafor package but the positioning of the text does seem to follow the usual logic. I suggest you start with this example:
remove the ilab, ilab.xpos, and xlim arguments and plot that. Then run
par("usr")[1:2]
That will display the x axis limits used for the plot. Then run forest() again but add in the argument xlim = c(-35,20)
and see how the plot changes. Then add ilab=sub$HomePos
and ilab.xpos=-20
. You can repeat the plot with ilab.pos set to -16 and see how the text column moves. I think that will help clarify how the text is placed.
I do not understand how to pick the particular ilab.xpos values other than trial and error. However, I have never used the package, so I my understanding may be completely wrong.