Correct. You have to use the LifeCycleMessage to change the state of a Timesheet.
The following XMLs shows how to move an item to state Submitted and Approved:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Session xmlns="http://clarizen.com/api">
<ID>XXX</ID>
</Session>
<Execute xmlns="http://clarizen.com/api">
<request>
<BaseMessage xsi:type="LifecycleMessage">
<Ids>
<EntityId>
<TypeName>Timesheet</TypeName>
<Value>8a676b1c-5f22-475b-8c1c-375766609140</Value>
</EntityId>
</Ids>
<Operation>Submit</Operation>
<Recursive>false</Recursive>
</BaseMessage>
</request>
</Execute>
Approve:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Session xmlns="http://clarizen.com/api">
<ID>XXX</ID>
</Session>
<Execute xmlns="http://clarizen.com/api">
<request>
<BaseMessage xsi:type="LifecycleMessage">
<Ids>
<EntityId>
<TypeName>Timesheet</TypeName>
<Value>8a676b1c-5f22-475b-8c1c-375766609140</Value>
</EntityId>
</Ids>
<Operation>Approve</Operation>
<Recursive>false</Recursive>
</BaseMessage>
</request>
</Execute>