When using FileCSVLoadGlobal an internal data structure maintains the global row pointer value which is accessible to all users.  In addition each virtual user maintains an individual row pointer which they update when calling FileGetNextRow or FileGetRow is executed.  If the script contains logic so that a virtual user does not call FileGetNextRow or FileGetRow the vritual user's row pointer is not updated.

You must modify the logic in the script so that each user calls FileGetRow in order to update their individual row pointers. 

One option would be to use FileGetRow in conjunction a GlobalVar to maintain the row pointer as detailed in:

How can I assign unique data from a CSV file and ensure that each virtual user reads a unique row in an ordered fashion when running the loadtest on multiple agent machines?