O método removeIf remove a empresa sem erros e sem precisar de iterator ou escrever o laço (testei aqui e está ok):
public void remove(Integer id) {
Banco.empresas.removeIf(emp -> emp.getId().equals(id));
}
Há algum problema que eu não percebi ao usar essa abordagem?