What does your form look like? Do you have some JavaScript or something on that? Because what I’m used to seeing with default code for time fields is an array with hour, minute and second separated.
public function beforeMarshal(EventInterface $event, ArrayObject $data, ArrayObject $options)
{
if ($data['departuretime']) {
$data['departuretime'] = new FrozenTime($data['departuretime']);
}
}