I've re-built your formula, so I can see what it was doing (and used the nifty drag and drop to check what each part is doing)...but it is just that you need the parameter hour in 24 hour format
When I set the time to 16 (so not 4) and 40...it shows me those who punched in before and after 16:40 fine.
...this seems too simple to be the solution, so if you let me know what behavior you are expecting I'm happy to take a look.
I think your parameter is assuming a.m.
So when you put 4:30 it thinks the morning.
Try adding 12 to the hour limit...
,DATETIME(STR(DATE([Out Punch]))+' '+STR([Punch Out Hour Limit] + 12)+':'+STR([Punch Out Minute Limit]))
) < 0 THEN 'Late'
Oh wow! I'm embarrassed I didn't catch on to that. Thank you both for your help
No problem...sometime you are just too close to a problem!! (done it myself many times!)...and you'd done the really complicated bit (breaking out and rebuilding the date/time from parameter) so well...so often the way!