Perhaps move some of this to a private method (note change to `Files#asCharSource` with `read()`) called from the synchronised block.

    private BrooklynMemento readMemento() {
        try {
            return serializer.fromString(Files.asCharSource(file, Charsets.UTF_8).read());
        } catch (IOException e) {
            LOG.error("Failed to persist memento", e);
            throw Exceptions.propagate(e);
        }
    }

The synchronised block would assume the same scope as the current try/catch that is no longer needed.