This issue was due to a floating point error. When the graphical interface is rounding up/down floating points it can sometimes cause an instrument to be off the beat just so slightly enough to cause it to not trigger as expected.
The following script helped to move all instruments with conditions back slightly enough to allow them to trigger on the beat properly.
var event = studio.window.browserCurrent(); // Select the event in the Events browser first
// Gather all instrument types
var allSingleInst = studio.project.model.SingleSound.findInstances(event);
var allMultiInst = studio.project.model.MultiSound.findInstances(event);
var allScattererInst = studio.project.model.SoundScatterer.findInstances(event);
var allInstruments = [];
// Push all instruments with trigger conditions into an array
allSingleInst.forEach(function(inst) {
if(inst.triggerConditions.length > 0) {
allInstruments.push(inst);
}
});
allMultiInst.forEach(function(inst) {
if(inst.triggerConditions.length > 0) {
allInstruments.push(inst);
}
});
allScattererInst.forEach(function(inst) {
if(inst.triggerConditions.length > 0) {
allInstruments.push(inst);
}
});
// Rounds down floating point to 2 decimal places
allInstruments.forEach(function(inst){
inst.start = Math.floor(inst.start * 100) / 100;
});