Es importante saber si trabajas con CakePHP 1.3, 2.x ó 3.x
Sea cual sea, lo primero es que en Produccion->find('all') se devuelve un array, por eso es muy posible que la instrucción $result = $horaf - $horai arroje el mensaje de operación no soportada (estás restando arrays).
Haz debug sobre $horaf y sobre $horai para ver cómo está estructurado el contenido de esas variables y así saber cómo restar las horas (que si están en formato TIME no se pueden restar así de fácil)
Además, el Produccion->updateAll está mal expresado: primero porque la palabra array está mal escrita, segundo porque el array está mal construido y tercero porque a la llamada a updateall le falta un parámetro (que aunque es opcional, creo que en tu caso es obligatorio).
La explicación de tu problema tampoco está bien redactado porque no me aclara ni lo que quieres hacer ni la estructura de tu bdd.
Si 'horast' está en la misma tabla que 'horai' y 'horaf', y quieres calcularlo para todas las entradas, es tan fácil como:
$this->Produccion->updateAll(array('Produccion.horast' => 'Produccion.horaf - Produccion.horai'));
Si está en tablas diferentes, el script sería (para Cakphp 1.3):
$producciones = $this->Produccion->find('all', array('fields' => array('Produccion.id', 'Produccion.horai', 'Produccion.horaf'), 'recursive' => -1);
$this->loadModel('OtraTabla');
foreach ($produccion as $produccion) {
$this->OtraTabla->updateAll(array('Produccion.horast' => $produccion['Produccion'][´horaf'] - $produccion['Produccion'][´horai']), array('Produccion.id' => $produccion['Produccion'][´id']));