Apologies if you've abbreviated the code at all, but shouldn't
SELECT * FROM RaceResults INNER JOIN Entrants ON RaceResults.EntrantId = Entrants.Id WHERE Entrants.Id = " & EntrantId
just be
"SELECT * FROM RaceResults WHERE EntrantId = " & EntrantId
There doesn't seem to be a need for an INNER JOIN there - although this might not solve anything for you or there might be more information being retrieved from the other table as well, but it doesn't look like there is.
If using a Cursor seems to generate a problem have you attempted to not use a Cursor and see what the results are?
It may well be worth trying to work out the different versions of SQLite in play - there could have been a change which is now affecting your code. I seem to remember having some SQL which happily ran until newer devices came out and needed a slight re-jig which worked on the older and newer versions.
Typically I Open a Cursor, retrieve the data, populate a list and then close the Cursor. But all you're doing is executing a count - you could achieve this using something like this :
Count = sqlDatabase.ExecQuerySingleResult("SELECT count(_id) FROM RaceResults WHERE EntrantId =" & EntrantId)
Then check Count and set TRUE or FALSE accordingly