I have to guess that the properties that field values you're setting should be unique for each row in the business object, right? Like each row in the business object should have its own _CheckDetail...There are 2 ways to accomplish that:
1) When you add a handler to the list changed on the data table, add a new column to the data table that stores types of Object:
Me.CurrentDataTable.Columns.Add(New DataColumn("_CheckDetail", GetType(Object)))
This will allow you to store the _CheckDetail business object within the row that is using it. So, each instance used by the BBS points to the correct _CheckDetail instance (obviously, you change your property to return Me.CurrentRow("_CheckDetail") and set it).
2) The other option would be to created a shared property called _CheckDetails that is a dictionary of BoCheckDetail:
Private Shared _CheckDetails As New Dictionary(Of Integer, BoCheckDetail)
You would store all of the check detail business objects in the dictionary and access them by the PK of the current record. This option would be secondary to the first since you would need to remember to clean out the dictionary when you're done because it's shared, so the garbage collector would never clean up the items in it unless you explicitly removed them.