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
        }
      }
    }
  }
}
```

result = clean_json_orig(resource_json, resources_map)
        if isinstance(result, BaseModel):
            if isinstance(resource_json, dict) and 'Ref' in resource_json:
                entity_id = get_entity_id(result, resource_json)
                if entity_id:
                    return entity_id
                LOG.warning('Unable to resolve "Ref" attribute for: %s - %s - %s',
                            resource_json, result, type(result))
        return result
    clean_json_orig = parsing.clean_json
    parsing.clean_json = clean_json
    
    parsing.MODEL_MAP.update(MODEL_MAP)
    
    def parse_and_create_resource(logical_id, resource_json, resources_map, region_name):
        try:
            return _parse_and_create_resource(logical_id, resource_json, resources_map, region_name)
        except Exception as e:
            LOG.error('Unable to parse and create resource "%s": %s %s' %
                      (logical_id, e, traceback.format_exc()))
            raise
    def parse_and_update_resource(logical_id, resource_json, resources_map, region_name):
        try:
            return _parse_and_create_resource(logical_id,
                resource_json, resources_map, region_name, update=True)
        except Exception as e:
            LOG.error('Unable to parse and update resource "%s": %s %s' %
                      (logical_id, e, traceback.format_exc()))
            raise
    def _parse_and_create_resource(logical_id, resource_json, resources_map, region_name, update=False):