The brackets give the clue – the lambda variable is captured in the scope of where it’s declared:
.Where(o => ... olist.Where(o1 => ...).Max(o1 => ...))
// |----------------------------------------------| scope of o
// |---------| scope of first o1
// |---------| scope of second o1
Note that there’s no overlap for the two o1 variables, but they both overlap (or shadow) the o variable and hence can’t use the same name.