It's actually two different systems in the code.
SetSpritePosition places the sprite into a list which is displayed every frame from then on (unless off screen of course). All sprites in the list are displayed at the same time and it is done *after* the text rendering which is why you can't have text on top of positioned sprites.
PasteSprite and PasteSpritePosition effectively create a brand new sprite from the same image which is displayed once and then discarded. This is done before the text rendering so you can then have text on top.
I believe each pasted sprite is it's own drawcall whereas the positioned sprites are all done in a single call (or something like that), if so the former would be better performance wise.
Don't ask me why we have two different systems, like everything GG related, it's one of those esoteric mysteries.
Been there, done that, got all the T-Shirts!