Minor comment - you could just make this one compound if:

if (mInProgress || (newOnly && mLastIndex) || mLastIndex >= index)
  return false;

but my major comment is:  how can this work!?  It seems to me after the first time you go through this routine, mInProgress will be set to true, and then the request will NEVER indicate again that it needs an update!!