I have a function that copies rows from one sheet to another, which works when I run it manually:
function updateDataRange() {
  var formSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1");
  var lastFormRow = formSheet.getLastRow();
  var dataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DataRange");
  dataSheet.clear();
  for(var rowCounter = 1; rowCounter <= lastFormRow; rowCounter++) {
    var sourceRange = formSheet.getRange('B'+rowCounter+':H'+rowCounter);
    var insertRow = dataSheet.getLastRow() + 1;
    var targetRange = dataSheet.getRange('A'+insertRow);
    sourceRange.copyTo(targetRange);
  }
}
However, when I run this via a trigger (e.g. function onEdit(e) { updateDateRange(); } ), there are gaps in the rows and some of the values will be left out. In this case, I know there is a "fix" by using rowCounter instead of insertRow to write the files instead of using getLastRow(), but one can easily see how this is a problem in another scenario.
So I guess my question is simple: Why isn't this working correctly when using a trigger?
Edit: To clarify, I have a 3rd sheet with some conditions/cells (i.e. conditions that influence which rows are to be copied) and changing them (like changing a different date) trigger the function.
 
     
    