Managed to work out a solution based on this stack overflow post: http://stackoverflow.com/questions/28854585/laravel-5-form-request-data-pre-manipulation#answer-32038527
It does seem like a Laravel bug to me though, really this should work out of the box.
Anyway for anyone who comes across this, my solution is:
Place the following in your form request and replace the $boolean array with all the booleans you are validating.
/**
* Extend the default getValidatorInstance method
* so fields can be modified or added before validation
*
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function getValidatorInstance()
{
$booleans = ['aBoolean', 'anotherBoolean'];
$data = $this->all();
foreach ($booleans as $boolean) {
if(array_key_exists($boolean, $data))
$data[$boolean] = (boolean) $data[$boolean];
}
$this->getInputSource()->replace($data);
return parent::getValidatorInstance();
}