Shane,
Row buffering always does an automatic tabelupdate when the record pointer moves. A list with a rowsourcetype of fields moves the record pointer when the the selected item is changed. So you put row buffering with a list and you have magic happening to you all over the place.
Use Table buffering only. Then nothing magic happens. Tableupdate only occurs when you issue the tableupdate call. You can still limit the user to only working on one record at a time by not allowing them to navigate to any other record.