Hi Chintan,
If these are browser based InfoPath forms, you will need to add some checkin/checkout logic to prevent overwrites. Mel describes this technique for Infopath Forms in her blog post from May.
However, your problem is related to SharePoint List forms. My guess is that your ID generation is returning the same values for people that call it at the same time before submit. Since you are not locking around that you could have a race condition where two users get the same max(ID) and submit two separate forms and the 1st one is overwritten with the second. To get around this, I recommend not using a SharePoint list ID. Rather, use a natural key. Something based on a date-time-stamp. Another idea, is to do the submit, get the ID, set the ID in the form, and submit again (in effect, a double submit). The first submit "reserves" the row for the form.