I've been looking at what it would take to fix this, and it doesn't seem too bad - the client module in awful.lua already has a floating_geometry property to do this for floating clients, and having client_resize_floating in the mouse module hook into that is trivial. I would actually like the floating layout to always restore to the previous floating geometries if possible (so going floating -> tiled -> floating with a single tag displayed would end up with the original geometry)

I second this, strongly. A number of times i've had the floating window laid out the way i wanted it and then accidentally moved to another layout. When i come back to the floating layout i have to re-size and rearrange the whole desktop to the way it was manually. It's a work-stopper.

The functionality you descirbe can be achieved by adding the following to your rc.lua:

client.connect_signal("property::geometry", function(c)
if awful.client.floating.get(c) or awful.layout.get(c.screen).name == "floating" then
awful.client.property.set(c, "floating_geometry", c:geometry())
end
end)
awful.tag.attached_connect_signal(nil, "property::layout", function(t)
local s = awful.tag.getscreen(t)
if awful.layout.get(screen[s]).name == "floating" then
for i, c in pairs(client.get(s)) do
c:geometry(awful.client.property.get(c, "floating_geometry"))
end
end
end)
awful.tag.attached_connect_signal(nil, "property::selected", function(t)
local s = awful.tag.getscreen(t)
if awful.layout.get(screen[s]).name == "floating" then
for i, c in pairs(client.get(s)) do
c:geometry(awful.client.property.get(c, "floating_geometry"))
end
end
end)