Naga's comment is (at least partially) correct.
What happens is that each Flow is evaluated in turn, in a round-robin sort of way, pausing each Flow when it reaches a DML or Query block. Once all Flows are paused because of this condition, all of the query conditions or DML operations are grouped into a single action for bulkification, and then the query or DML operation is executed.
If you look at the logs, you'd see something like:
Start Flow #1
Start Flow #2
Get Project #1 (wait)
Get Project #2 (wait)
Get Insurance #1 (wait)
Get Insurance #2 (wait)
Assign Count #1
Update Record #1 (wait)
Assign Count #2
Update Record #2 (wait)
So, in your code, each Flow reaches the Count Insurance Records step, then both of the new records are found, and so the Assignment afterwards sees the count at 4, which is what gets assigned to each record.
There's no way to resolve this using only Flows. This is one of several different limitations with Flows in regard to bulkification; they cannot communicate with each other to coordinate counting records correctly. You would need a trigger in order to fix this problem.
To avoid the problem for uploading, assign your records so that no two Insurance records for the same Project are within the same 200 records.
You can read more about this in Flow Bulkification in Transctions.