You are using calendar_interval, to use 30 minutes you have to use fixed_interval, more details in the docs.
That's because you filtered these documents in the query. The query is applied at the very beginning, making it impossible for transform to take ERROR into account.
In order to let transform see the errors, you have to apply the filter as part of aggregations:
"aggregations": {
"order_count" : {
"filter": {
"bool": {
"must_not":[
{"term":{"content.state":"ERROR"}}
]
}
}
}
}