g_iGroupInfoBuffer doesn't have to be an array (that is probably 33 long?), it can be a single cell because no other player will get processed between pre and post hook. I don't really know how to explain it but I hope you get it.
groupinfo is completely server-side it seems (doesn't get transmitted with the entity state). The issue is probably that you enable semiclip right when players touch, so the client will predict the touch and get corrected after player's ping delay, resulting in that "jitter". Enable it at a distance, say 128 units between players' origins.