Here are some other approaches besides punning:
1. Create an annotation property and use that to relate the instance of ICE to the chlorine class. The disadvantage of this is you can't do reasoning using the annotation property, but you can still do SPARQL queries on it.
2. Use an anonymous class to say that your instance of the ice is about some instance of chlorine. In functional syntax, the OWL would look something like this (ice#1 is the instance of the ICE, chlorine is a class):
ClassAssertion(ObjectSomeValuesFrom('is about' chlorine) ice#1)
In this OWL statement, ice#1 isn't related the class itself, but it is related (via 'is about') to those things which are instances of chlorine. The advantage of this is that it does support reasoning. However, to write a SPARQL query for it, you have to use owl:onProperty, and this can be a pain to get correct.
I've used method #2, but I'm not sure it really necessary. If you don't need to rely on the reasoner, I would probably advocate for method #1. But I don't know the particulars of your project.
-- Bill