Gutenberg block can’t save richtext

Couple of things to try – remove some of the curly braces { } because those are only needed when you’re referring to variables, and try just directly calling onChange:

        <div className={'caption'}>
            <RichText
                tagName="p"
                className="imgCtaContent"
                onChange={ ( content ) => { setAttributes( { content } ) } }
                value={content}
                placeholder="Enter text..."
            />
        </div>

Also in save(), setting a value on RichText.content isn’t needed and may be confusing things. Just use

return (
    <div className={props.className}>

        <RichText.Content />

    </div>
);