I faced the same problem. I googled for a solution and found this thread. I understand that you posted this a long time ago, so I reply primarily for Google to have a solution :)
As far as I understand, this is not a problem, but normal behaviour of the GridView with enabled ViewState. OnRowCreated is first fired when the GridView is being loaded from ViewState, and is subsequently fired again when it is being populated with actual data. So if you have viewstate enabled, there is no way and no need to fix this.