Look at line 110/111 in viz.py on master, the channel names from layout are only read if preset in ch_names (as piped through `_clean_names`). So checkking for bads in evorkd.ch_names should be suffient
like [ch for ch in evoked.ch_names if not in evoked.info['bads']]