Buenas Miguel.
Por un lado, listOf crea una lista con los productos que le pases (al ser el último siempre te mostrará el último). Por lo que te recomiendo que inicialices "listaProductos" fuera del for y añadas elementos con "add" a la lista:
val listaProductos = listOf<Producto>();
for (...){
...
listaProductos.add(producto)
...
}
Por otro lado, me parece que no te hace falta llamar tantas veces a setOnItemClickListener (esto es una propuesta de mejora, no debería de tener que ver con tu problema). Prueba sacando fuera del "for" la parte (pues parece que la estás llamándola múltiple veces cuando creas el listaProductos):
val adapter = ProductosAdapter(this, listaProductos)
lista.adapter = adapter
lista.setOnItemClickListener { parent, view, position, id ->
val intent = Intent(this, ProductoActivity::class.java)
intent.putExtra("producto", listaProductos[position])
startActivity(intent)
}