After updating an existing row, you need to fireTableDataChanged(). This loses user selection. It trigger a re-filter and re-sort. To keep user selection, try
fireTableRowsUpdated(0, getRowCount() – 1) // a broken alternative as it re-sorts and keeps user selection, but doesn’t trigger re-filter, so the updated row may fail to show/hide.
See other post on the performance implications of frequent sorting on a large live table.