Repository: openforcefield/openff-toolkit

Issue:
`deepcopy`ing a `Molecule` re-uses the properties dict
**Describe the bug**

`mol.properties` is not copied when calling `copy.deepcopy(mol)`, so that modifying the copy's properties modifies the original.

**To Reproduce**
```python
from copy import deepcopy
from openff.toolkit import Molecule

mol = Molecule.from_smiles("CC")
mol.properties["test"] = "hello, world!"

mol_copy  = deepcopy(mol)
mol_copy.properties["test"] = "So long and thanks for all the fish"

assert mol_copy.properties["test"] == "So long and thanks for all the fish" # Succeeds
# This should succeed, because the original molecule should not have been modified
assert mol.properties["test"] == "hello, world!" # Fails
```

**Output**

No error message, just silently does the wrong thing.

**Computing environment (please complete the following information):**
Arch Linux
<details><summary><code>conda list</code> output </summary>

```
# packages in environment at /home/joshmitchell/Documents/openff/toolkit/.soap/test:
#
# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                 conda_forge    conda-forge
_openmp_mutex             4.5                       2_gnu    conda-forge
abseil-cpp                20210324.2           h9c3ff4c_0    conda-forge
amberlite                 22.0                     pypi_0    pypi
ambertools                22.0            py310h3aec49d_3    conda-forge
amberutils                21.0                     pypi_0    pypi
argon2-cffi               21.3.0             pyhd8ed1ab_0    conda-forge
argon2-cffi-bindings      21.2.0                   pypi_0    pypi
arpack                    3.7.0                hdefa2d7_2    conda-forge
arrow-cpp                 9.0.0           py310hd6ac832_1_cpu    conda-forge
asttokens                 2.0.8              pyhd8ed1ab_0    conda-forge
astunparse                1.6.3              pyhd8ed1ab_0    conda-forge
attrs                     22.1.0             pyh71513ae_1    conda-forge
aws-c-cal                 0.5.11               h95a6274_0    conda-forge
aws-c-common              0.6.2                h7f98852_0    conda-forge
aws-c-event-stream        0.2.7               h3541f99_13    conda-forge
aws-c-io                  0.10.5               hfb6a706_0    conda-forge
aws-checksums             0.1.11               ha31a3da_7    conda-forge
aws-sdk-cpp               1.8.186              hb4091e7_3    conda-forge
backcall                  0.2.0              pyh9f0ad1d_0    conda-forge
backports                 1.0                        py_2    conda-forge
backports.functools_lru_cache 1.6.4              pyhd8ed1ab_0    conda-forge
beautifulsoup4            4.11.1             pyha770c72_0    conda-forge
bleach                    5.0.1              pyhd8ed1ab_0    conda-forge
blosc                     1.21.1               h83bc5f7_3    conda-forge
boost                     1.74.0          py310h7c3ba0c_5    conda-forge
boost-cpp                 1.74.0               h75c5d50_8    conda-forge
brotli                    1.0.9                h166bdaf_7    conda-forge
brotli-bin                1.0.9                h166bdaf_7    conda-forge
brotlipy                  0.7.0                    pypi_0    pypi
bson                      0.5.9                      py_0    conda-forge
bzip2                     1.0.8                h7f98852_4    conda-forge
c-ares                    1.18.1               h7f98852_0    conda-forge
ca-certificates           2022.6.15            ha878542_0    conda-forge
cached-property           1.5.2                hd8ed1ab_1    conda-forge
cached_property           1.5.2              pyha770c72_1    conda-forge
cachetools                5.2.0              pyhd8ed1ab_0    conda-forge
cairo                     1.16.0            ha61ee94_1013    conda-forge
certifi                   2022.6.15          pyhd8ed1ab_1    conda-forge
cffi                      1.15.1                   pypi_0    pypi
charset-normalizer        2.1.1              pyhd8ed1ab_0    conda-forge
codecov                   2.1.11             pyhd3deb0d_0    conda-forge
colorama                  0.4.5              pyhd8ed1ab_0    conda-forge
coverage                  6.4.4                    pypi_0    pypi
cryptography              37.0.4                   pypi_0    pypi
cudatoolkit               11.7.0              hd8887f6_10    conda-forge
curl                      7.83.1               h7bff187_0    conda-forge
cycler                    0.11.0             pyhd8ed1ab_0    conda-forge
cython                    0.29.32                  pypi_0    pypi
debugpy                   1.6.3                    pypi_0    pypi
decorator                 5.1.1              pyhd8ed1ab_0    conda-forge
defusedxml                0.7.1              pyhd8ed1ab_0    conda-forge
entrypoints               0.4                pyhd8ed1ab_0    conda-forge
execnet                   1.9.0              pyhd8ed1ab_0    conda-forge
executing                 1.0.0              pyhd8ed1ab_0    conda-forge
expat                     2.4.8                h27087fc_0    conda-forge
fftw                      3.3.10          nompi_hf0379b8_105    conda-forge
flit-core                 3.7.1              pyhd8ed1ab_0    conda-forge
font-ttf-dejavu-sans-mono 2.37                 hab24e00_0    conda-forge
font-ttf-inconsolata      3.000                h77eed37_0    conda-forge
font-ttf-source-code-pro  2.038                h77eed37_0    conda-forge
font-ttf-ubuntu           0.83                 hab24e00_0    conda-forge
fontconfig                2.14.0               h8e229c2_0    conda-forge
fonts-conda-ecosystem     1                             0    conda-forge
fonts-conda-forge         1                             0    conda-forge
fonttools                 4.37.1                   pypi_0    pypi
freetype                  2.12.1               hca18f0e_0    conda-forge
gettext                   0.19.8.1          h73d1719_1008    conda-forge
gflags                    2.2.2             he1b5a44_1004    conda-forge
glog                      0.6.0                h6f12383_0    conda-forge
greenlet                  1.1.3                    pypi_0    pypi
grpc-cpp                  1.45.2               h9d3bbbb_5    conda-forge
h5py                      3.7.0                    pypi_0    pypi
hdf4                      4.2.15               h9772cbc_4    conda-forge
hdf5                      1.12.2          nompi_h2386368_100    conda-forge
icu                       70.1                 h27087fc_0    conda-forge
idna                      3.3                pyhd8ed1ab_0    conda-forge
importlib-metadata        4.11.4                   pypi_0    pypi
importlib_resources       5.9.0              pyhd8ed1ab_0    conda-forge
iniconfig                 1.1.1              pyh9f0ad1d_0    conda-forge
ipykernel                 6.15.2             pyh210e3f2_0    conda-forge
ipython                   8.4.0              pyh41d4057_1    conda-forge
ipython_genutils          0.2.0                      py_1    conda-forge
ipywidgets                7.7.2              pyhd8ed1ab_0    conda-forge
jedi                      0.18.1             pyhd8ed1ab_2    conda-forge
jinja2                    3.1.2              pyhd8ed1ab_1    conda-forge
jpeg                      9e                   h166bdaf_2    conda-forge
jsonschema                4.15.0             pyhd8ed1ab_0    conda-forge
jupyter-core              4.11.1                   pypi_0    pypi
jupyter_client            7.3.5              pyhd8ed1ab_0    conda-forge
jupyter_core              4.11.1          py310hff52083_0    conda-forge
jupyterlab_pygments       0.2.2              pyhd8ed1ab_0    conda-forge
jupyterlab_widgets        1.1.1              pyhd8ed1ab_0    conda-forge
keyutils                  1.6.1                h166bdaf_0    conda-forge
kiwisolver                1.4.4                    pypi_0    pypi
krb5                      1.19.3               h3790be6_0    conda-forge
lcms2                     2.12                 hddcbb42_0    conda-forge
ld_impl_linux-64          2.36.1               hea4e1c9_2    conda-forge
lerc                      4.0.0                h27087fc_0    conda-forge
libblas                   3.9.0           16_linux64_openblas    conda-forge
libbrotlicommon           1.0.9                h166bdaf_7    conda-forge
libbrotlidec              1.0.9                h166bdaf_7    conda-forge
libbrotlienc              1.0.9                h166bdaf_7    conda-forge
libcblas                  3.9.0           16_linux64_openblas    conda-forge
libcrc32c                 1.1.2                h9c3ff4c_0    conda-forge
libcurl                   7.83.1               h7bff187_0    conda-forge
libdeflate                1.13                 h166bdaf_0    conda-forge
libedit                   3.1.20191231         he28a2e2_2    conda-forge
libev                     4.33                 h516909a_1    conda-forge
libevent                  2.1.10               h9b69904_4    conda-forge
libffi                    3.4.2                h7f98852_5    conda-forge
libgcc-ng                 12.1.0              h8d9b700_16    conda-forge
libgfortran-ng            12.1.0              h69a702a_16    conda-forge
libgfortran5              12.1.0              hdcd56e2_16    conda-forge
libglib                   2.72.1               h2d90d5f_0    conda-forge
libgomp                   12.1.0              h8d9b700_16    conda-forge
libgoogle-cloud           1.40.2               habd0e3a_0    conda-forge
libiconv                  1.16                 h516909a_0    conda-forge
liblapack                 3.9.0           16_linux64_openblas    conda-forge
libnetcdf                 4.8.1           nompi_h21705cb_104    conda-forge
libnghttp2                1.47.0               hdcd2b5c_1    conda-forge
libnsl                    2.0.0                h7f98852_0    conda-forge
libopenblas               0.3.21          pthreads_h78a6416_3    conda-forge
libpng                    1.6.37               h753d276_4    conda-forge
libprotobuf               3.20.1               h6239696_1    conda-forge
libsodium                 1.0.18               h36c2ea0_1    conda-forge
libsqlite                 3.39.3               h753d276_0    conda-forge
libssh2                   1.10.0               haa6b8db_3    conda-forge
libstdcxx-ng              12.1.0              ha89aaad_16    conda-forge
libthrift                 0.16.0               h519c5ea_1    conda-forge
libtiff                   4.4.0                h0e0dad5_3    conda-forge
libutf8proc               2.7.0                h7f98852_0    conda-forge
libuuid                   2.32.1            h7f98852_1000    conda-forge
libwebp-base              1.2.4                h166bdaf_0    conda-forge
libxcb                    1.13              h7f98852_1004    conda-forge
libxml2                   2.9.14               h22db469_4    conda-forge
libxslt                   1.1.35               h8affb1d_0    conda-forge
libzip                    1.9.2                hc869a4a_1    conda-forge
libzlib                   1.2.12               h166bdaf_2    conda-forge
lxml                      4.9.1                    pypi_0    pypi
lz4-c                     1.9.3                h9c3ff4c_1    conda-forge
lzo                       2.10              h516909a_1000    conda-forge
markupsafe                2.1.1                    pypi_0    pypi
matplotlib                3.5.3                    pypi_0    pypi
matplotlib-base           3.5.3           py310h8d5ebf3_2    conda-forge
matplotlib-inline         0.1.6              pyhd8ed1ab_0    conda-forge
mdtraj                    1.9.7                    pypi_0    pypi
mistune                   2.0.4              pyhd8ed1ab_0    conda-forge
mmpbsa-py                 16.0                     pypi_0    pypi
mongo-types               0.15.1                   pypi_0    pypi
msgpack                   1.0.4                    pypi_0    pypi
msgpack-python            1.0.4           py310hbf28c38_0    conda-forge
munkres                   1.1.4              pyh9f0ad1d_0    conda-forge
mypy                      0.971                    pypi_0    pypi
mypy-extensions           0.4.3                    pypi_0    pypi
mypy_extensions           0.4.3           py310hff52083_5    conda-forge
nbclient                  0.6.7              pyhd8ed1ab_0    conda-forge
nbconvert                 7.0.0              pyhd8ed1ab_0    conda-forge
nbconvert-core            7.0.0              pyhd8ed1ab_0    conda-forge
nbconvert-pandoc          7.0.0              pyhd8ed1ab_0    conda-forge
nbformat                  5.4.0              pyhd8ed1ab_0    conda-forge
nbval                     0.9.6              pyh9f0ad1d_0    conda-forge
ncurses                   6.3                  h27087fc_1    conda-forge
nest-asyncio              1.5.5              pyhd8ed1ab_0    conda-forge
netcdf-fortran            4.6.0           nompi_hc402ea5_100    conda-forge
networkx                  2.8.6              pyhd8ed1ab_0    conda-forge
nglview                   3.0.3              pyh8a188c0_0    conda-forge
nomkl                     1.0                  h5ca1d4c_0    conda-forge
notebook                  6.4.12             pyha770c72_0    conda-forge
numexpr                   2.8.3                    pypi_0    pypi
numpy                     1.23.2                   pypi_0    pypi
ocl-icd                   2.3.1                h7f98852_0    conda-forge
ocl-icd-system            1.0.0                         1    conda-forge
openeye-toolkits          2022.1.1                py310_0    openeye
openeye-toolkits-python3-linux-x64 2022.1.1                 pypi_0    pypi
openff-amber-ff-ports     0.0.3              pyh6c4a22f_0    conda-forge
openff-forcefields        2.0.0              pyh6c4a22f_0    conda-forge
openff-interchange-base   0.2.1              pyhd8ed1ab_0    conda-forge
openff-toolkit            0.11.0+16.g82aaa7a6           dev_0    <develop>
openff-units              0.1.7              pyh6c4a22f_1    conda-forge
openff-utilities          0.1.5              pyh6c4a22f_0    conda-forge
openjpeg                  2.5.0                h7d73246_1    conda-forge
openmm                    7.7.0                    pypi_0    pypi
openssl                   1.1.1q               h166bdaf_0    conda-forge
orc                       1.7.5                h6c59b99_0    conda-forge
packaging                 21.3               pyhd8ed1ab_0    conda-forge
packmol                   20.010               h86c2bf4_0    conda-forge
packmol-memgen            1.2.3rc0                 pypi_0    pypi
pandas                    1.4.4                    pypi_0    pypi
pandoc                    2.19.2               ha770c72_0    conda-forge
pandocfilters             1.5.0              pyhd8ed1ab_0    conda-forge
parmed                    3.4.3                    pypi_0    pypi
parquet-cpp               1.5.1                         2    conda-forge
parso                     0.8.3              pyhd8ed1ab_0    conda-forge
pcre                      8.45                 h9c3ff4c_0    conda-forge
pdb4amber                 22.0                     pypi_0    pypi
perl                      5.32.1          2_h7f98852_perl5    conda-forge
pexpect                   4.8.0              pyh9f0ad1d_2    conda-forge
pickleshare               0.7.5                   py_1003    conda-forge
pillow                    9.2.0                    pypi_0    pypi
pint                      0.19.2             pyhd8ed1ab_0    conda-forge
pip                       22.2.2             pyhd8ed1ab_0    conda-forge
pixman                    0.40.0               h36c2ea0_0    conda-forge
pkgutil-resolve-name      1.3.10             pyhd8ed1ab_0    conda-forge
plotly                    5.10.0             pyhd8ed1ab_0    conda-forge
pluggy                    1.0.0                    pypi_0    pypi
prometheus_client         0.14.1             pyhd8ed1ab_0    conda-forge
prompt-toolkit            3.0.31             pyha770c72_0    conda-forge
psutil                    5.9.2                    pypi_0    pypi
pthread-stubs             0.4               h36c2ea0_1001    conda-forge
ptyprocess                0.7.0              pyhd3deb0d_0    conda-forge
pure_eval                 0.2.2              pyhd8ed1ab_0    conda-forge
py                        1.11.0             pyh6c4a22f_0    conda-forge
py-cpuinfo                8.0.0              pyhd8ed1ab_0    conda-forge
pyarrow                   9.0.0                    pypi_0    pypi
pycairo                   1.21.0                   pypi_0    pypi
pycparser                 2.21               pyhd8ed1ab_0    conda-forge
pydantic                  1.10.2                   pypi_0    pypi
pygments                  2.13.0             pyhd8ed1ab_0    conda-forge
pymsmt                    22.0                     pypi_0    pypi
pyopenssl                 22.0.0             pyhd8ed1ab_0    conda-forge
pyparsing                 3.0.9              pyhd8ed1ab_0    conda-forge
pyrsistent                0.18.1                   pypi_0    pypi
pysocks                   1.7.1              pyha2e5f31_6    conda-forge
pytables                  3.7.0           py310hb60b9b2_2    conda-forge
pytest                    7.1.3                    pypi_0    pypi
pytest-cov                3.0.0              pyhd8ed1ab_0    conda-forge
pytest-forked             1.4.0              pyhd8ed1ab_0    conda-forge
pytest-rerunfailures      10.2               pyhd8ed1ab_0    conda-forge
pytest-xdist              2.5.0              pyhd8ed1ab_0    conda-forge
python                    3.10.6          h582c2e5_0_cpython    conda-forge
python-constraint         1.4.0                      py_0    conda-forge
python-dateutil           2.8.2              pyhd8ed1ab_0    conda-forge
python-fastjsonschema     2.16.1             pyhd8ed1ab_0    conda-forge
python_abi                3.10                    2_cp310    conda-forge
pytraj                    2.0.6                    pypi_0    pypi
pytz                      2022.2.1           pyhd8ed1ab_0    conda-forge
pyyaml                    6.0                      pypi_0    pypi
pyzmq                     23.2.1                   pypi_0    pypi
qcelemental               0.25.0             pyhd8ed1ab_0    conda-forge
qcengine                  0.24.1             pyhd8ed1ab_0    conda-forge
qcportal                  0.15.8             pyhd8ed1ab_0    conda-forge
rdkit                     2022.03.5       py310h1c297d8_0    conda-forge
re2                       2022.06.01           h27087fc_0    conda-forge
readline                  8.1.2                h0f457ee_0    conda-forge
reportlab                 3.5.68                   pypi_0    pypi
requests                  2.28.1             pyhd8ed1ab_1    conda-forge
s2n                       1.0.10               h9b69904_0    conda-forge
sander                    22.0                     pypi_0    pypi
scipy                     1.9.1                    pypi_0    pypi
send2trash                1.8.0              pyhd8ed1ab_0    conda-forge
setuptools                65.3.0             pyhd8ed1ab_1    conda-forge
six                       1.16.0             pyh6c4a22f_0    conda-forge
smirnoff99frosst          1.1.0              pyh44b312d_0    conda-forge
snappy                    1.1.9                hbd366e4_1    conda-forge
soupsieve                 2.3.2.post1        pyhd8ed1ab_0    conda-forge
sqlalchemy                1.4.40                   pypi_0    pypi
stack_data                0.5.0              pyhd8ed1ab_0    conda-forge
tables                    3.7.0                    pypi_0    pypi
tenacity                  8.0.1              pyhd8ed1ab_0    conda-forge
terminado                 0.15.0                   pypi_0    pypi
tinycss2                  1.1.1              pyhd8ed1ab_0    conda-forge
tk                        8.6.12               h27826a3_0    conda-forge
toml                      0.10.2             pyhd8ed1ab_0    conda-forge
tomli                     2.0.1              pyhd8ed1ab_0    conda-forge
tornado                   6.2                      pypi_0    pypi
tqdm                      4.64.1             pyhd8ed1ab_0    conda-forge
traitlets                 5.3.0              pyhd8ed1ab_0    conda-forge
types-pkg-resources       0.1.3                    pypi_0    pypi
types-pyyaml              6.0.11                   pypi_0    pypi
types-setuptools          65.3.0                   pypi_0    pypi
types-toml                0.10.8                   pypi_0    pypi
typing-extensions         4.3.0                hd8ed1ab_0    conda-forge
typing_extensions         4.3.0              pyha770c72_0    conda-forge
tzdata                    2022c                h191b570_0    conda-forge
unicodedata2              14.0.0                   pypi_0    pypi
urllib3                   1.26.11            pyhd8ed1ab_0    conda-forge
wcwidth                   0.2.5              pyh9f0ad1d_2    conda-forge
webencodings              0.5.1                      py_1    conda-forge
wheel                     0.37.1             pyhd8ed1ab_0    conda-forge
widgetsnbextension        3.6.1              pyha770c72_0    conda-forge
xmltodict                 0.13.0             pyhd8ed1ab_0    conda-forge
xorg-kbproto              1.0.7             h7f98852_1002    conda-forge
xorg-libice               1.0.10               h7f98852_0    conda-forge
xorg-libsm                1.2.3             hd9c2040_1000    conda-forge
xorg-libx11               1.7.2                h7f98852_0    conda-forge
xorg-libxau               1.0.9                h7f98852_0    conda-forge
xorg-libxdmcp             1.1.3                h7f98852_0    conda-forge
xorg-libxext              1.3.4                h7f98852_1    conda-forge
xorg-libxrender           0.9.10            h7f98852_1003    conda-forge
xorg-libxt                1.2.1                h7f98852_2    conda-forge
xorg-renderproto          0.11.1            h7f98852_1002    conda-forge
xorg-xextproto            7.3.0             h7f98852_1002    conda-forge
xorg-xproto               7.0.31            h7f98852_1007    conda-forge
xz                        5.2.6                h166bdaf_0    conda-forge
yaml                      0.2.5                h7f98852_2    conda-forge
zeromq                    4.3.4                h9c3ff4c_1    conda-forge
zipp                      3.8.1              pyhd8ed1ab_0    conda-forge
zlib                      1.2.12               h166bdaf_2    conda-forge
zstd                      1.5.2                h6239696_4    conda-forge

```

</details>

**Additional context**

This breaks a few tests when attempting to update QCSubmit to use the toolkit post 0.11.

Discussion:
codecov[bot]: # [Codecov](https://codecov.io/gh/openforcefield/openff-toolkit/pull/1417?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=openforcefield) Report
> Merging [#1417](https://codecov.io/gh/openforcefield/openff-toolkit/pull/1417?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=openforcefield) (23012e1) into [main](https://codecov.io/gh/openforcefield/openff-toolkit/commit/0182a57388ca86d751f8ac5c0457f0374e6fe714?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=openforcefield) (0182a57) will **decrease** coverage by `10.89%`.
> The diff coverage is `75.00%`.

> :exclamation: Current head 23012e1 differs from pull request most recent head b98c9bb. Consider uploading reports for the commit b98c9bb to get more accurate results

<details><summary>Additional details and impacted files</summary>


</details>

Patch:
diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml
index 7bae40b5..2495269b 100644
--- a/.github/workflows/CI.yml
+++ b/.github/workflows/CI.yml
@@ -49,7 +49,7 @@ jobs:
       PYTEST_ARGS: -r fE --tb=short -nauto --cov=openff --cov-config=setup.cfg --cov-append --cov-report=xml
 
     steps:
-      - uses: actions/checkout@v3.0.2
+      - uses: actions/checkout@v3.1.0
         with:
           fetch-depth: 2
 
diff --git a/.github/workflows/beta_rc.yaml b/.github/workflows/beta_rc.yaml
index a399492a..33b7d538 100644
--- a/.github/workflows/beta_rc.yaml
+++ b/.github/workflows/beta_rc.yaml
@@ -23,7 +23,7 @@ jobs:
       PYTEST_ARGS: -r fE --tb=short --cov=openff --cov-config=setup.cfg --cov-append --cov-report=xml
 
     steps:
-      - uses: actions/checkout@v3.0.2
+      - uses: actions/checkout@v3.1.0
         with:
           fetch-depth: 2
 
diff --git a/.github/workflows/conda.yml b/.github/workflows/conda.yml
index 24d120c1..a4c03348 100644
--- a/.github/workflows/conda.yml
+++ b/.github/workflows/conda.yml
@@ -28,7 +28,7 @@ jobs:
       PACKAGE: openff-toolkit
 
     steps:
-      - uses: actions/checkout@v3.0.2
+      - uses: actions/checkout@v3.1.0
 
       - name: Vanilla install from conda
         uses: mamba-org/provision-with-micromamba@main
diff --git a/.github/workflows/conda_010X.yml b/.github/workflows/conda_010X.yml
index 608aac77..38a631a9 100644
--- a/.github/workflows/conda_010X.yml
+++ b/.github/workflows/conda_010X.yml
@@ -28,7 +28,7 @@ jobs:
       PACKAGE: openff-toolkit
 
     steps:
-      - uses: actions/checkout@v3.0.2
+      - uses: actions/checkout@v3.1.0
 
       - name: Vanilla install from conda
         uses: mamba-org/provision-with-micromamba@main
diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml
index 98e49c43..d6482282 100644
--- a/.github/workflows/examples.yml
+++ b/.github/workflows/examples.yml
@@ -41,7 +41,7 @@ jobs:
       NB_ARGS: -v --nbval-lax --ignore=examples/deprecated --durations=20
 
     steps:
-      - uses: actions/checkout@v3.0.2
+      - uses: actions/checkout@v3.1.0
         with:
           fetch-depth: 2
 
diff --git a/.github/workflows/installer.yml b/.github/workflows/installer.yml
index 780999eb..b7b7584d 100644
--- a/.github/workflows/installer.yml
+++ b/.github/workflows/installer.yml
@@ -20,7 +20,7 @@ jobs:
       PYVER: ${{ matrix.python-version }}
 
     steps:
-    - uses: actions/checkout@v3.0.2
+    - uses: actions/checkout@v3.1.0
 
     - name: Install conda environment
       uses: mamba-org/provision-with-micromamba@main
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 5de6eae6..bdd79ea4 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -10,7 +10,7 @@ jobs:
     runs-on: ubuntu-latest
 
     steps:
-      - uses: actions/checkout@v3.0.2
+      - uses: actions/checkout@v3.1.0
 
       - uses: actions/setup-python@v4.2.0
         with:
diff --git a/docs/releasehistory.md b/docs/releasehistory.md
index 3c126a1f..d4f03a9e 100644
--- a/docs/releasehistory.md
+++ b/docs/releasehistory.md
@@ -8,6 +8,10 @@ Releases follow the `major.minor.micro` scheme recommended by [PEP440](https://w
 
 ## Current development
 
+## Bug fixes
+
+- [PR #1417](https://github.com/openforcefield/openff-toolkit/pull/1417): Ensure the properties dict is copied when a `Molecule` is.
+
 ## 0.11.1 Minor release forbidding loading radicals
 
 ## Behavior changes
diff --git a/openff/toolkit/topology/molecule.py b/openff/toolkit/topology/molecule.py
index c5aed176..698293cc 100644
--- a/openff/toolkit/topology/molecule.py
+++ b/openff/toolkit/topology/molecule.py
@@ -1096,9 +1096,9 @@ class FrozenMolecule(Serializable):
         # Or not allow user-defined properties at all (just use our internal _cached_properties)
         # molecule_dict['properties'] = dict([(key, value._to_dict()) for key.value in self._properties])
         # TODO: Assuming "simple stuff" properties right now, figure out a better standard
-        molecule_dict["properties"] = self._properties
+        molecule_dict["properties"] = deepcopy(self._properties)
         if hasattr(self, "_cached_properties"):
-            molecule_dict["cached_properties"] = self._cached_properties
+            molecule_dict["cached_properties"] = deepcopy(self._cached_properties)
         # TODO: Conformers
         if self._conformers is None:
             molecule_dict["conformers"] = None
@@ -1218,7 +1218,7 @@ class FrozenMolecule(Serializable):
                 conformer = unit.Quantity(conformer_unitless, c_unit)
                 self._conformers.append(conformer)
 
-        self._properties = molecule_dict["properties"]
+        self._properties = deepcopy(molecule_dict["properties"])
 
         for iter_name, hierarchy_scheme_dict in molecule_dict[
             "hierarchy_schemes"
@@ -4734,7 +4734,7 @@ class FrozenMolecule(Serializable):
                 new_molecule._add_conformer(new_conformer * unit.angstrom)
 
         # move any properties across
-        new_molecule._properties = self._properties
+        new_molecule._properties = deepcopy(self._properties)
 
         return new_molecule
 


Test patch:
diff --git a/openff/toolkit/tests/test_molecule.py b/openff/toolkit/tests/test_molecule.py
index 4f59c23f..5ee9acd0 100644
--- a/openff/toolkit/tests/test_molecule.py
+++ b/openff/toolkit/tests/test_molecule.py
@@ -3287,6 +3287,40 @@ class TestMolecule:
             with pytest.warns(UserWarning, match="compute_.*_am1bcc.*0.12"):
                 toolkit.compute_partial_charges_am1bcc(molecule)
 
+    def test_deepcopy_not_shallow(self):
+        """
+        Check that deep copies don't re-use any mutable data structures
+
+        Mutable attributes set in ``Molecule._initialize_from_dict()`` and their
+        mutable values should be tested here. Other attributes are either not
+        copied by ``deepcopy``, or else are immutable, so copies may be the same
+        object (eg, ``deepcopy(None)``).
+        """
+        mol_source = create_ethanol()
+        mol_source.generate_conformers()
+
+        mol_copy = copy.deepcopy(mol_source)
+
+        assert mol_source._conformers is not mol_copy._conformers
+        assert all(
+            a is not b for a, b in zip(mol_source._conformers, mol_copy._conformers)
+        )
+
+        assert mol_source._atoms is not mol_copy._atoms
+        assert all(a is not b for a, b in zip(mol_source._atoms, mol_copy._atoms))
+
+        assert mol_source._bonds is not mol_copy._bonds
+        assert all(a is not b for a, b in zip(mol_source._bonds, mol_copy._bonds))
+
+        assert mol_source._hierarchy_schemes is not mol_copy._hierarchy_schemes
+        assert all(
+            a is not b
+            for a, b in zip(mol_source._hierarchy_schemes, mol_copy._hierarchy_schemes)
+        )
+
+        assert mol_source._properties is not mol_copy._properties
+        assert mol_source._partial_charges is not mol_copy._partial_charges
+
 
 class TestMoleculeVisualization:
     @requires_pkg("IPython")