I can reproduce this with DynamoDB and S3. For example, this file as `template.json`:
```json
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::Serverless-2016-10-31",
  "Resources": {
    "S3Setup": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketName": "testbucket"
      }
    }
  }
}
```
Apply using
`awslocal cloudformation create-stack --stack-name local --template-body file://template.json` -> 200 OK
Immediately followed by
`awslocal cloudformation create-change-set --stack-name local --change-set-name nochanges --template-body file://template.json` -> Error
Errors happen if stack has multiple objects and any one has no changes, which makes it impossible to update the stack via cloudformation.

Here's a DynamoDB example for which it happens as well:
```json
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Transform": "AWS::Serverless-2016-10-31",
  "Resources": {
    "DynamoSample": {
      "Type": "AWS::DynamoDB::Table",
      "Properties": {
        "TableName": "ExampleTable",
        "AttributeDefinitions": [
          {
            "AttributeName": "name",
            "AttributeType": "S"
          }
        ],
        "KeySchema": [
          {
            "AttributeName": "name",
            "KeyType": "HASH"
          }
        ],
        "ProvisionedThroughput": {
          "ReadCapacityUnits": 1,
          "WriteCapacityUnits": 1
        }
      }
    }
  }
}
```

from pympler import muppy, summary
        all_objects = muppy.get_objects()
        result = summary.summarize(all_objects)
        result = result[0:20]
        summary = '\n'.join([l for l in summary.format_(result)])
        result = '%s\n\n%s' % (summary, json.dumps(result))
        return result, 200, {'content-type': 'text/plain'}
    def create_backend_app(service):
        backend_app = moto_server.create_backend_app_orig(service)
        backend_app.add_url_rule(
            '/_stats', endpoint='_get_stats', methods=['GET'], view_func=_get_stats, strict_slashes=False)
        return backend_app
    if not hasattr(moto_server, 'create_backend_app_orig'):
        moto_server.create_backend_app_orig = moto_server.create_backend_app
        moto_server.create_backend_app = create_backend_app
def start_up(*args):
    
    apply_patches()
    
    inject_stats_endpoint()
    return moto_main(*args)
def main():
    setup_logging()
    
    canonicalize_api_names()
    
    sys.exit(start_up())
if __name__ == '__main__':
    main()