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

if attribute_name in ['Arn', 'QueueArn']:
            return aws_stack.sqs_queue_arn(queue_name=self.name)
        return SQS_Queue_get_cfn_attribute_orig(self, attribute_name)
    SQS_Queue_get_cfn_attribute_orig = sqs_models.Queue.get_cfn_attribute
    sqs_models.Queue.get_cfn_attribute = SQS_Queue_get_cfn_attribute
    
    @property
    def SQS_Queue_physical_resource_id(self):
        result = SQS_Queue_physical_resource_id_orig.fget(self)
        if '://' not in result:
            
            return aws_stack.get_sqs_queue_url(result)
        return result
    SQS_Queue_physical_resource_id_orig = sqs_models.Queue.physical_resource_id
    sqs_models.Queue.physical_resource_id = SQS_Queue_physical_resource_id
    
    def Lambda_Function_get_cfn_attribute(self, attribute_name):
        try:
            if attribute_name == 'Arn':
                return self.function_arn
            return Lambda_Function_get_cfn_attribute_orig(self, attribute_name)
        except Exception:
            if attribute_name in ('Name', 'FunctionName'):
                return self.function_name
            raise
    Lambda_Function_get_cfn_attribute_orig = lambda_models.LambdaFunction.get_cfn_attribute
    lambda_models.LambdaFunction.get_cfn_attribute = Lambda_Function_get_cfn_attribute
    
    def DynamoDB_Table_get_cfn_attribute(self, attribute_name):