The only thing that I ever get out of a Form event object is the response ID.
var response_id= e.response.getId()
And then I get the Form, and get the response of a particular ID directly from the Form, never from the event object. Unfortunately, getting item responses out of the event object for a Google Form seems to be unreliable.
The issue with the question 2 grid items not being updated to the new choices if user B opens the Form before user A submits the Form can't be avoided, I don't think. I'm assuming that the question 2 grid items are being changed from code that runs when the Form is submitted. If multiple users have the Form open at the same time, their Google Form can't be dynamically updated as the Form is open. That situation isn't a "race" condition because multiple instances of the code aren't running at the same just because the Form is open.
If multiple users submit the Form about at the same time, then you could get a situation where subsequent instances of the code are running before the previous one completes. That can cause variable values in the first instance to be overwritten, causing the first instance of the running code to be using values from the second instance of the code. To deal with that situation, you should use LockService. Although, I don't 100% trust LockService either, depending on how heavy the use of the Form is. But, if it works for you, then I'd use it.
You could use a Web App instead of a Google Form. With a Web App, you can change the questions when the form is open. You could also put the Web App into a Google Site.