Yes, because if the first condition of an AND evaluates to false, the second condition will not be evaluated. So you have the conditions the right way round for your purposes.
I believe the matching and non-matching device variables will be updated regardless of the result of the second condition. I’m not sure that is an issue though.
What would concern me is that your variable names ‘WhoIsAway’ and ‘WhoIsHome’ are suggestive of being lists of who is away and who is at home. I don’t think your piston will provide that.
The visible part of the piston will fire whenever there is a change to the ‘currentPlace’ of one of your Presence devices. I don’t know whether you really need an ‘on events from’ as the piston will fire anyway, and the ‘on events from’ block runs asynchronously which might not be what you want in more complex pistons.
I am not entirely confident of what the first condition is for. It seems to be testing if the ‘previousPlace’ was changed over 60 seconds ago. My confusion is caused by not being familiar with the device and so assuming that ‘currentPlace’ and ‘previousPlace’ would change at the same time, which wouldn’t make sense as the ‘currentPlace’ has only just changed for the piston to be running.
If the second condition is reached, it will only ever populate ‘WhoIsAway’ with a single device name, that of the one that just changed away from ‘Home’. All the other presence devices will be in ‘WhoIsHome’, whether they are at home or away or also just left.