So another few hours digging into internet search results and trying things and I sort of have this working.
NSDate * userDate = [NSDate dateWithNaturalLanguageString: inWhenString];
NSDateComponents * userDateComponents = [[NSCalendar currentCalendar] components: NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate: userDate];
NSDate * dayDate = [[NSCalendar currentCalendar] dateFromComponents: userDateComponents];
dNSLog(@"date %@", dayDate );
NSString * formatStr = [NSDateFormatter dateFormatFromTemplate: @"yyyy-MM-dd" options: 0 locale: nil];
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat: formatStr];
NSString * dayStr = [formatter stringFromDate: dayDate];
dayStr = [dayStr stringByAppendingString: @"*"];
dNSLog(@"dayString: %@", dayStr );
NSPredicate *p1 = [NSPredicate predicateWithFormat: @"%K >= CAST(%f, \"NSDate\")", @"kMDItemAccessedDates", [dayDate timeIntervalSinceReferenceDate] ];
NSPredicate *p2 = [NSPredicate predicateWithFormat: @"%K <= CAST(%f, \"NSDate\")", @"kMDItemAccessedDates", [dayDate timeIntervalSinceReferenceDate] + 86400.0f ];
predicate = [NSCompoundPredicate andPredicateWithSubpredicates: @[p1, p2]];
There may be other issues with this whole approach (based on how the app updates this array of dates) that may require me to do something else entirely, but this seems to answer the original question of how to fetch only items that were accessed on a particular day.
The key was the CAST(%f, \"NSDate\")
I believe.
There might still be a better way, but I thought I'd put this up here in case someone else is digging around for any clues.