This is normal behavior for an After Update Trigger that causes workflow to fire. See Item 12 in Triggers and Order of Execution in the Apex Docs.
If you want to prevent your trigger from running it's code a second time, what you can do is create a public static boolean that's checked before the code in trigger runs. If false, the code enters your trigger. If true, the code executes and the code within your trigger doesn't run.
Regardless, your trigger will still be called after the workflow runs the first time. The utility code would looks something like below:
//create a utility class to hold the boolean
public with sharing MyTriggerUtility class {
public static boolean IsFirstRun = false;
}
At the start of your trigger's Before Update or After Update code, add the following line:
MyTrigger (BeforeInsert,AfterInsert,BeforeUpdate,AfterUpdate){
Boolean isFirstRun;
// ... other code
If(trigger.isUpdate){
If(!MyTriggerUtility.isFirstRun){
MyTriggerUtility.isFirstRun = true;
// ... continue with trigger code
}// end of FirstRun test
}// end of Update code section
} end of trigger