Question: It is my understanding that the memory layout of a Common Lisp object (bitwise tagging is defined by CLOS (classes).

I understand that every class has a corresponding type, but not every type has a corresponding class, because types can be compound (lists). I think that types are like logical constraints, as opposed to classes that are concrete "types" with a tagging scheme.

If this is correct, does the type system serve any other purpose other than being a logical constraint (such as specifying that an integer must be within a certain range, or that an array contains a particular type)?

If this is not correct, what purpose does the type system actually serve in light of CLOS? Thanks.

Answer: 
A type *is* a set of values.

A type specifier is some way to succinctly represent a type.

Implementations may do all kinds of markings and registering in order to help them sort out the types of things, but that is not inherent to the concept of types.

A class is an object describing a set of other objects. Since having a succinct name for such a set (type) is quite useful, Common Lisp registers the class name as a type specifier for the corresponding set of objects. That is the whole relation of types to classes.
The type system defines different objects that do different things. The CLOS system is more so used for methods that define special behaviors for types in a more logical way for some programmers. Coming from Java, the CLOS System was more logical and systematic for me, so it has a role for some programmers. I like to think of the CLOS system as a class in Java such as the Integer class, and the type system similar to primitives in Java. The CLOS system simply helps you extend your objects with methods in a more systematic way than creating a structure imho.