Well, as always, I find the answer immediately after I grow frustrated enough to post a public question. The issue was with my range. I had assumed that the GridRange parameter worked like A1 notation, where applying to rows 3-3 would simply apply to row 3:
StartRowIndex = 3, EndRowIndex = 3
Instead, it seems to ignore the first row in the range and apply to each following row. For example:
StartRowIndex = 3, EndRowIndex = 5
This will apply the update to the cells in rows 4 and 5, but crucially not row 3. I hope this helps someone!