I just did a quick test to confirm the behavior. I don't see it mentioned in the docs for pos, but I guess the reason would be that you're doing a substitution, so the matched text is essentially considered removed from the string at that point. Therefore pos will return the position where the substituted value will be inserted once you've computed it.
Comment on Re: Inconsistent behaviour of pos() in s/ ... / ... /
That is an interesting suggestion and it makes perfect sense if it is in fact the designed behaviour. I'm kicking myself for not thinking of it. I couldn't see anything in the documentation either. If this is the way pos() should work it would be nice to have it documented perhaps.