try something like this, make your group_pos
a float instead of smallint.
Try this sqlFiddle in the fiddle i set @position to 1 to take 2nd position, if you want it to be first in the list you can try setting it to 0.
SET @position = 1;
UPDATE items SET group_pos =
(SELECT SUM(group_pos)/2 as newGroupPos FROM
(SELECT 0 as group_pos,0 as rank
UNION
SELECT group_pos,@rank:=@rank+1 as rank FROM items,(SELECT @rank:=0)var
WHERE group_refid=1
ORDER BY group_pos
)T1 WHERE rank IN (@position,@position+1)
)
WHERE group_refid=1 AND group_pos=3;