Error with Diffable DataSource - reload items

I am repeatedly seeing this error when attempting to call reloadItems(_:) on a NSDiffableDataSourceSnapshot instance.

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: indexPath || ignoreInvalidItems'

Code Block Swift
var dataSource: UITableViewDiffableDataSource<Section, Foo>!
func incrementFoo(_ foo: Foo) {
    var snapshot = dataSource.snapshot()
    var foo = foo
    foo.upvoteCount += 1
    snapshot.reloadItems([foo])
    dataSource.apply(snapshot)
}


After much time messing with this, it appears that this internal exception is usually thrown when using a struct for your model object with inferred Hashable conformance. It can also happen sometimes with a class if you do something wonky with your Hashable conformance, but I can't see to put my finger on it. 
Error with Diffable DataSource - reload items
 
 
Q