You can do this:
Tag::with(array('posts' => function ($query) { $query->where('published', '=', 1); })->where('tagname', '=', $tag) ->first();
However, that's pretty much all you can do with it unfortunately. Ordering and most other stuff is not supported as of yet - the way I got around this was to create a function in the model like so:
public function posts_ordered() { return $this->has_many_and_belongs_to('Post')->order_by('your_field', 'asc'); }
So you will have a normal function for posts() in the model, but also posts_ordered can be used like:
Tag::with('posts_ordered')->where('tagname', '=', $tag)->first();
Unfortunately you cannot pass variables (as far as I have tried) to those functions, hence the need to create seperate ones.