Subclasses and Instances
While there may be subtle differences, it's usually OK to think about classes as sets, and subclasses of subsets. We typically recognize subset relationships when we say "every X is also a Y", in which case X ⊆ Y. We typically realize things as sets when we can say that "X is a Y", in which case X is an element and Y is a set.
We definitely want to be able to say that "X is an rdfs:Datatype" for values of X such as xsd:integer, so we do want rdfs:Datatype to be a class, which means that we want
(1) rdfs:Datatype rdf:type rdfs:Class.
The question is whether we want
(2) rdfs:Datatype rdfs:subClassOf rdfs:Class.
Because of the domain of rdfs:subClassOf is rdfs:Class, (2) actually implies (1). That is, everything that's a subclass of something is a class, so if we assert (2), then (1) logically follows. We definitely want (1). The question is whether we assert (2) and get both (1) and (2) for free, or if we only assert (1), and skip (2).
Conceptually, (2) makes sense. Everything that is a datatype is something that is a type. If some D is a datatype, then a sentence like "x is a D" makes sense. That means that the set of datatypes is a subset of all classes. This justifies accepting (2).
The specific possibilities
(2) (and implicitly (1))
It may be helpful to think of this as a hierarchy of instances, classes, and meta-classes. rdfs:subClassOf is a link between elements of the same tier, whereas rdf:type is link between elements of one tier and the tier higher up. If rdfs:Datatype a subclass of rdfs:Class, then we keep all of our "things" at the same level:

(1) alone (without (2))
If we make rdfs:Datatype an instance of rdfs:Class, then the specific datatypes, e.g., xsd:integer, are now on the same tier as our individuals (like John Doe), and the instance of those datatype, e.g., Thirty, are on a lower tier:

Now, whether this is a big deal or not is open to some debate. The notion of class and metaclass isn't really strict in an open ended representation like RDF. After all, rdfs:Class is an instance of rdfs:Class!
An option in the comments
You mentioned a third alternative in your comment on Jeen's answer (emphasis added):
But suppose rdf:Datatype was just an instance of a class not a
subclass. What difference would it make?! Everything you mentioned
still holds. xsd:integer could still subclass rdf:Datatype, and
instances of xsd:integer, would have class xsd:integer. There seems no
reason to introduce sub classing of rdf:Class at all. I don't
understand what it adds to the ~semantics.
You don't want xsd:integer to be a subclass of rdfs:Datatype, because that would say that "if X is an integer, then X is a datatype", and that's really not what we expect. Thirty is an integer, but it's not a datatype; we don't typically say that something "is of type Thirty". In your chain
rdsf:Class ←X— rdfs:Datatype ←Y— xsd:integer
you can make an argument for X being either rdfs:subClassOf (case (2)) or rdf:type (case (1)), but Y really needs to be rdf:type, not rdfs:subClassOf, because integers and datatypes are different kinds of things.