Una cosa es el objeto, y otra la variable/referencia.
tu variable val siempre apunta al mismo objeto, así que cuando haces
Cita: val.setCaja("caja2");
val.setControl("2");
modificas el objeto que ya existe (no creas uno nuevo), y cuando lo añades a la lista, realmente estás añadiendo una segunda referencia al mismo objeto.
Resumiendo, lo dos elementos de tu lista apuntan al mismo objeto, el único que has creado.