I might have figured out what is causing the doubled exposure time. I made a new script that is a "minimum viable product" to take exposures, but performs all of the configuration in the way it is normally done in my program. Doing this I could quickly change various settings to see how the program would react. I found that I could not consistently get the doubled exposure until I was taking 9 second exposures. 8 seconds and below, it might happen rarely, but at 9 seconds it happened fairly often.
My indi code (which is based on Marco Gulino's indi-light-tools) has a synchronous mode for taking exposures. Basically, it sets the exposure value and then queries the status of the exposure control until it is idle. The code I was using would query the status of the control every 0.05 seconds, or 20 times a second. Backing off to 0.15 seconds between status calls seems to do better. It appears the cause of the doubled exposure is aggressively querying of the status of the exposure control. I am not sure if it is the total number of status calls or just the calls-per-second causing the behavior.
It does appear to be specific to the sv305. I have tested several other cameras (ASI, QHY) and they do not exhibit the same behavior.