Before you use CloseVertex, using coordinate transforms like SetPosition/Angle/Scale are applied only to the next sprite added. After you use CloseVertex, it affects the whole object together, taking (0,0) as object center.
So ObjSpriteList2D_SetDestRect maps the texture relative to a sprite's position, ObjRender_SetPosition sets the sprite's position relative to the object's position, and using ObjSpriteList2D_CloseVertex and then ObjRender_SetPosition sets the object's position. So depending on how you use these all together you can get some interesting results with how you map sprites.
For example, if you position sprites at (0,0), (10,0), (20,0), close the list, then position the object at (100,100), the sprites will end up at actual positions (100,100), (110,100), (120,100).
(But you already know this given how you're moving the dialogue box.)
ObjRender_SetAlpha works fine as long as you use it per-sprite, but it doesn't work on the whole thing. And like other render functions, it also applies to every sprite added afterwards without needing to call it again. But considering you want to use it on the whole object post-construction, you're going to have to do it differently by using ObjPrim_SetVertexAlpha instead (since 2D Sprite List objects are still Primitive objects).
function ObjSpriteList2D_SetAlpha(obj, a){
ascent(v in 0..ObjPrim_GetVertexCount(obj)){
ObjPrim_SetVertexAlpha(obj, v, a);
}
}
Considering some of this confusion is due to the wiki's pretty crappy documentation on it, I changed it a bit to hopefully make it clearer how the sprite lists work.