Went through the CMN_ID_SP in SQL Server, and the logic seems very similar to the implementation in Oracle, except for the coding to deal with Identity Columns. But I did notice the behaviour that you are referring to here. The CMN_SEQ tables do not get updated every time a insert happens to the corresponding Primary Key holding table.
But the increments in the primary key holding tables are consistent. So, provided that there are no caching mechanisms that seem to be coded for in the SP, I think there is some factor outside of it, that is dealing with the increments once a maximum value is determined for a session. And since flushing application cache by going into security.caches, forces the CMN_SEQ tables to be updated, I think that the increments are somehow handled either as a function of the SQL Server database, or may be in the Java code.
So, if you are trying to insert directly into the ODF_LOCKED_ATTRIBUTES table, then finding the maximum ID in that table, and determining that this ID is less than the LAST_ID in CMN_SEQ table, should be enough to determine the next ID. If however, the LAST_ID in the CMN_SEQ table is less than the maximum ID, then call the CMN_ID_SP, and get the next value from it.